(57)【要約】【課題】メモリやメモリコントローラに誤り検出訂正機能が備わっていない場合であっても、データが消失することを防止する。【解決手段】ストレージ装置９は、複数のＣＭ１〜４が相互に接続する。ＣＭ４では、ＣＰＵ４４が、ＤＩＭＭ４３およびメモリコントローラ４２の少なくとも一方がＥＣＣ非対応である場合に、ホスト８からＣＭ１およびＣＭ２が管轄するディスク５へのデータの書込み命令が受け付けられると、ＣＲＣが付加されたデータを、メモリコントローラ４２を介してＤＩＭＭ４３に展開し、展開したデータに誤りが検出されるか否かを判定する。そして、ＣＰＵ４４は、データに誤りが検出されないと判定した場合、誤りが検出されなかったデータを予め定められた記憶領域に退避する。そして、書込み命令のデータの退避が完了した後、ＣＡ４１が、ホスト８へ書き込みが完了したことを通知する。【選択図】図１
2014032516.tif 000002
【特許請求の範囲】
【請求項１】
ストレージと、
前記ストレージへの書き込みデータを受信する制御装置と、
を備え、
前記制御装置は、
メモリと、
前記メモリへのデータの入出力制御を行うメモリコントローラと、
前記メモリおよび前記メモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、前記ストレージへのデータ書き込み処理時に、書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、を有する
ことを特徴とするストレージ装置。
【請求項２】
前記ストレージへの書き込みデータを受信する第１の制御装置と、前記書き込みデータの書き込み先のストレージへの入出力制御を行う第２の制御装置が異なる場合において、
前記第１の制御装置は、
前記メモリに展開されたデータを前記第２の制御装置および前記第２の制御装置と冗長化された第３の制御装置のメモリへ転送する転送部を、さらに有し、
前記第２の制御装置は、
前記転送部によって自装置のメモリへ転送されたデータを前記ストレージへ書き込む際、さらに前記データに誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、自装置のメモリへ転送されたデータに誤りが検出された場合、前記第３の制御装置に対して前記転送部によって転送されたデータの書き込みを要求する書込要求部と、
前記データ判定部による判定の結果、自装置のメモリへ転送されたデータに誤りが検出されなかった場合、誤りが検出されなかったデータを前記ストレージへ書き込むデータ書込部とをさらに有する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第２の制御装置は、
前記書込要求部によって要求された書き込みが失敗したことを、前記第３の制御装置から受け付けた場合、前記退避部によって退避されたデータの書き込みをすべく、前記第１の制御装置に対して当該データの転送を要求する転送要求部をさらに有する
ことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記第２の制御装置は、
前記第１の制御装置を経由した読込み処理時に、前記ストレージから読み込んだデータを、前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、
前記退避部によって退避が完了した後、前記誤りが検出されなかったデータを前記第１の制御装置へ転送する転送部とをさらに有する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
メモリと、
前記メモリへのデータの入出力制御を行うメモリコントローラと、
前記メモリおよび前記メモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、ストレージへのデータ書き込み処理時に、書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、
を有することを特徴とする制御装置。
【請求項６】
前記データ判定部は、読込み処理時に、前記ストレージから読み込んだデータを、前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定し、
前記退避部は、前記データ判定部によって前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する
ことを特徴とする請求項５に記載の制御装置。
【請求項７】
ストレージへの書き込みデータを受信し、
メモリおよび前記メモリへのデータの入出力制御を行うメモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、該受信する処理によって受信された書き込みデータにおけるストレージへのデータ書き込み処理時に、当該書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定し、
該判定する処理による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する
各処理を実行することを特徴とするデータ保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置などに関する。
【背景技術】
【０００２】
ストレージ装置は、ホストからデータの書き込み要求を受け取ると、データを正しく受け取ったことをホストへ通知し、受け取ったデータをディスクに書き込む。仮に、ストレージ装置が、データを正しく受け取れなかった場合、データを正しく受け取れなかったことをホストへ通知し、ホストから再度同じデータを受け取る。そして、ストレージ装置からデータを正しく受け取ったことを通知されたホストは、保持していた当該データを削除し、データの書き込みに使用されていた資源を別の作業に使用する。すなわち、ストレージ装置は、データの受信完了をできるだけ早くホストに通知し、加えてデータを正しく書き込むことが求められる。
【０００３】
このため、ストレージ装置は、データの受信完了をホストに早期に通知することができるように設計される。例えば、ストレージ装置は、ホストからデータを受信すると、受信したデータを一旦メモリに書き込む。その後、ストレージ装置は、実際にデータをディスクに書き込む前に、ホストへ受信完了を通知する。そして、ストレージ装置は、メモリでデータ化けが検出されても訂正できるように、誤り検出訂正機能を備えたメモリを搭載することが多い。なお、誤り検出訂正機能には、例えばＥＣＣ（Error  Detection  And  Correction）がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−２８８６１９号公報
【特許文献２】特開２００８−１５８７７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、メモリやメモリコントローラに誤り検出訂正機能が備わっていない場合、書き込み要求のデータが消失してしまう場合があるという問題がある。
【０００６】
具体的に、書き込み要求のデータが消失してしまう問題を、図８および図９を参照して説明する。ここでは、メモリをＤＩＭＭ（Dual  Inline  Memory  Module）として説明し、誤り検出訂正機能をＥＣＣとして説明する。図８は、ＤＩＭＭがＥＣＣ対応である場合のディスクへの書き込み処理を説明する図である。図９は、ＤＩＭＭがＥＣＣ非対応である場合のディスクへの書き込み処理を説明する図である。
【０００７】
図８に示すように、ストレージ装置９００は、ＣＭ＃０およびＣＭ＃１が冗長化され、ＣＭ＃２およびＣＭ＃３が冗長化され、ＣＭ＃０〜ＣＭ＃３は、ＰＣＩｅスイッチで接続されている。そして、ＣＭ＃０、ＣＭ＃３がホストと接続されている。ＣＭ＃０〜ＣＭ＃３は、ＣＰＵ９１０とＤＩＭＭ９２０とメモリコントローラ９３０とを有する。さらに、ＣＭ＃０〜ＣＭ＃３は、ＣＡ（Channel  Adapter）９４０とＤＩ（Disk  Interface）９５０とＤＭＡ（Direct  Memory  Access）チップ９６０とＰＣＩｅスイッチ９７０とを有する。ＤＩＭＭ９２０は、ＥＣＣ対応のメモリモジュールである。メモリコントローラ９３０は、ＤＩＭＭ９２０を制御する、ＥＣＣ対応のコントローラである。ＣＡ９４０は、ホストとのインタフェースである。ＤＩ９５０は、ディスクとのインタフェースである。ＤＭＡチップ９６０は、ＤＭＡにおけるＣＭ間のインタフェースである。なお、ＤＭＡとは、ＣＰＵ９１０を介さないで直接データを転送するデータ転送方式のことをいう。ＰＣＩｅスイッチ９７０は、入出力デバイスとしてメモリコントローラ９３０、ＣＡ９４０、ＤＩ９５０およびＤＭＡチップ９６０と接続する。
【０００８】
このようなストレージ装置９００において、ホストからＣＭ＃０およびＣＭ＃１が管轄するディスク領域への書き込み要求が発生した場合、書き込み処理の流れは以下のようになる。まず、ホストからデータの書き込み要求を受け取ったＣＭ＃３のＣＡ９４０は、ＤＭＡ機能により書き込み要求のデータをＤＩＭＭ９２０に転送し、転送したデータをＤＩＭＭ９２０に展開する（図８（１））。このとき、ＣＡ９４０は、データに誤り検出符号（例えば、ＣＲＣ（Cyclic  Redundancy  Check））が付加されていなければ、データに誤り検出符号を付加してからデータをＤＩＭＭ９２０に転送する。ＤＩＭＭ９２０では、仮にデータ化けが検出されても、ＥＣＣ対応であるので、データ化けを自動的に修正する。
【０００９】
そして、ＣＡ９４０がデータの転送が完了したことをＣＰＵ９１０に通知すると、ＣＰＵ９１０は、ホストへデータの受信完了を通知する（図８（２））。そして、ホスト側では、書き込み要求のデータを削除する。
【００１０】
その後、ＣＰＵ９１０は、ＤＭＡチップ９６０に対して、ディスク管轄のＣＭ＃０およびＣＭ＃１にデータを転送するように要求する。そして、ＤＭＡチップ９６０は、ＣＭ＃０およびＣＭ＃１のＤＩＭＭ９２０へデータを転送し、転送したデータをＤＩＭＭ９２０に展開する（図８（３））。ＤＩＭＭ９２０では、仮にデータ化けが検出されても、ＥＣＣ対応であるので、データ化けを自動的に修正する。
【００１１】
そして、ＤＩ９５０が、ＤＩＭＭ９２０からデータを読み込み、読み込んだデータの誤りをチェックし、誤りがなければディスクへ書き込む。仮に、誤りがあっても、ＤＩ９５０は、ＤＩＭＭ９２０から再度データを読み込むことで、正しいデータをディスクへ書き込むことができる（図８（４））。
【００１２】
次に、図９を用いて、ＤＩＭＭがＥＣＣ非対応である場合の書き込み処理について説明する。なお、ＤＩＭＭ９２０Ａは、ＥＣＣ非対応のメモリモジュールである。図９に示すように、ホストからデータの書き込み要求が出力されると、ＣＭ＃３のＣＡ９４０が、ＤＭＡ機能により書き込み要求のデータをＤＩＭＭ９２０Ａに転送し、転送したデータをＤＩＭＭ９２０Ａに展開する（図９（１））。このとき、ＣＡ９４０は、データに誤り検出符号（例えば、ＣＲＣ）が付加されていなければ、データに誤り検出符号を付加してからデータをＤＩＭＭ９２０Ａに転送する。ＤＩＭＭ９２０Ａでは、仮にデータ化けが検出されても、ＥＣＣ非対応であるので、データ化けを自動的に修正できずデータ化けのままとなる。
【００１３】
そして、ＣＡ９４０が、データの転送が完了したことをＣＰＵ９１０に通知すると、ＣＰＵ９１０は、ホストへデータの受信完了を送信する（図９（２））。そして、ホスト側では、書き込み要求のデータを削除する。
【００１４】
その後、ＣＰＵ９１０は、ＤＭＡチップ９６０に対して、ディスク管轄のＣＭ＃０およびＣＭ＃１にデータを転送するように要求する。そして、ＤＭＡチップ９６０は、ＣＭ＃０およびＣＭ＃１のＤＩＭＭ９２０Ａへデータを転送し、転送したデータをＤＩＭＭ９２０Ａに展開する（図９（３））。ＤＩＭＭ９２０Ａでは、仮にデータ化けが検出されても、ＥＣＣ非対応であるので、データ化けを自動的に修正できない。
【００１５】
そして、ＤＩ９５０が、ＤＩＭＭ９２０Ａからデータを読み込み、読み込んだデータの誤りをチェックし、誤りがなければディスクへ書き込む（図９（４））。しかし、誤りがあると、ＤＩ９５０は、ＣＭ＃０のＤＩＭＭ９２０Ａから再度データを読み込んでも、データ化けのデータであれば、チェックで誤りとなる。同様に、ＤＩ９５０は、ＣＭ＃３のＤＩＭＭ９２０Ａから再度データを読み込むとしても、データ化けのデータであれば、チェックで誤りとなる。既に、ホスト側には、データが削除されているので、データが消失しているという結果になる。
【００１６】
１つの側面では、本発明は、メモリやメモリコントローラに誤り検出訂正機能が備わっていない場合であっても、データが消失することを防止することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示するストレージ装置は、１つの態様において、ストレージと、前記ストレージへの書き込みデータを受信する制御装置と、を備え、前記制御装置は、メモリと、前記メモリへのデータの入出力制御を行うメモリコントローラと、前記メモリおよび前記メモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、前記ストレージへのデータ書き込み処理時に、書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、を有する。
【発明の効果】
【００１８】
本願の開示するストレージ装置の１つの態様によれば、メモリやメモリコントローラに誤り検出訂正機能が備わっていない場合であっても、データが消失することを防止できる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。
【図２】図２は、実施例１に係るストレージ装置の書き込み処理のフローチャートを示す図（１）である。
【図３】図３は、実施例１に係るストレージ装置の書き込み処理のフローチャートを示す図（２）である。
【図４】図４は、実施例１に係るストレージ装置の変形例のハードウェア構成を示す図である。
【図５】図５は、実施例２に係るストレージ装置のハードウェア構成を示す図である。
【図６】図６は、実施例２に係るストレージ装置の読み込み処理のフローチャートを示す図（１）である。
【図７】図７は、実施例２に係るストレージ装置の読み込み処理のフローチャートを示す図（２）である。
【図８】図８は、ＤＩＭＭがＥＣＣ対応である場合のディスクへの書き込み処理を説明する図である。
【図９】図９は、ＤＩＭＭがＥＣＣ非対応である場合のディスクへの書き込み処理を説明する図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示するストレージ装置、制御装置およびデータ保護方法の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００２１】
［ストレージ装置の構成］
図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。図１に示すように、ストレージ装置９は、複数のＣＭ（Controller  Module）１〜４とディスク５、６とＰＣＩｅスイッチ７とを有する。ＣＭ１〜４は、ＰＣＩｅスイッチ７を介して互いに接続されている。ＣＭ１、２は、ディスク５と接続し、データを冗長化する。ＣＭ３、４は、ディスク６と接続し、データを冗長化する。さらに、ＣＭ４は、サーバなどのホストコンピュータを示すホスト８と接続する。以下では、ＣＭ４が、ホスト８からＣＭ１、２が管轄するディスク５へのデータの書き込み要求を受け取った場合の書き込み動作を中心に説明する。なお、ＣＭ４が「第１の制御装置」の一例であり、ＣＭ１が「第２の制御装置」の一例であり、ＣＭ２が「第３の制御装置」の一例である。
【００２２】
ＣＭ４は、ＣＡ４１と、メモリコントローラ４２と、ＤＩＭＭ４３と、ＣＰＵ４４と、ＰＣＩｅスイッチ４５と、ＤＭＡチップ４６と、ＤＩ４７とを有する。なお、ＣＭ３は、ＣＭ１と同様の構成であるため、その説明を省略する。
【００２３】
ＣＡ４１は、ホストとのインタフェースである。例えば、ＣＡ４１は、ホスト８からＣＭ１、２が管轄するディスク５へのデータの書き込み要求を受け取ると、メモリコントローラ４２を介してＤＩＭＭ４３へデータを書き込む（図１（１１））。すなわち、ＣＡ４１は、ＤＭＡによるデータ転送方式で、データをＤＩＭＭ４１へ展開する。また、ＣＡ４１は、データをＤＩＭＭ４３へ書き込む際、データに誤り検出符号が付加されていなければ、データに誤り検出符号を付加してからデータをＤＩＭＭ４３に転送する。また、ＣＡ４１は、データについてＤＩＭＭ４３への転送を完了すると、後述するＣＰＵ４４にデータの転送完了を通知する。なお、データに付加される誤り検出符号は、例えばＣＲＣであるが、これに限定されるものではない。
【００２４】
メモリコントローラ４２は、後述するＤＩＭＭ４３へのデータの入出力制御を行う、ＥＣＣ対応のコントローラである。すなわち、メモリコントローラ４２では、仮にデータにデータ化けが検出されても、ＥＣＣ対応であるので、データ化けを自動的に修正する。なお、ＥＣＣ対応であるか否かは、内部に備えられたレジスタの値によって判別できる。例えば、ＥＣＣ対応である場合、レジスタの値が「１」に設定され、ＥＣＣ対応でない場合、レジスタの値が「０」に設定される。
【００２５】
ＤＩＭＭ４３は、ＥＣＣ非対応のメモリモジュールである。すなわち、ＤＩＭＭ４３では、仮にデータがデータ化けであっても、ＥＣＣ非対応であるので、データ化けを自動的に修正できず、データ化けのまま保持する。例えば、ＤＩＭＭ４３は、ＣＡ４１によってデータが書き込まれたとき、データ化けとなっても、データ化けのまま保持する。なお、ＥＣＣ対応であるか否かは、内部に備えられたＳＰＤ（Serial  Presence  Detect）情報によって判別できる。
【００２６】
ＣＰＵ４４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。一例として、ＣＰＵ４４は、ＤＩＭＭ４３へのデータの転送完了通知をＣＡ４１から受け取ると、転送されたデータのＣＲＣをチェックする。ここで、ＣＰＵ４４は、データにデータ化けが検出されないと、ＤＩＭＭ４３の別領域にデータをコピーする（図１（１２））。データを別領域にコピーするのは、データ化けが検出されなかった正常なデータを保護しておき、書き込み要求のデータの消失を防止するためである。
【００２７】
また、ＣＰＵ４４は、ホスト８へ受信完了を送信する（図１（１３））。これにより、ＣＰＵ４４は、受信完了をできるだけ早くホスト８側に送信することができ、ホスト８側では、書き込み要求のデータを削除し、データの書き込みに使用していた資源を別の作業に使用することができる。そして、ＣＰＵ４４は、ＰＣＩｅスイッチ４５を介して後述するＤＭＡチップ４６に対して、データの書き込み先のＣＭ１およびＣＭ２へデータを転送するように要求する（図１（１４））。なお、ＣＰＵ４４は、ＣＲＣをチェックした結果、データにデータ化けが検出されると、ホスト８にデータの再送を要求する。
【００２８】
ＰＣＩｅスイッチ４５は、入出力デバイスとしてＣＡ４１、メモリコントローラ４２、ＤＭＡチップ４６およびＤＩ４７と接続し、接続した入出力デバイス間でデータを中継する。
【００２９】
ＤＭＡチップ４６は、ＣＭ間のＤＭＡにおけるコントローラである。例えば、ＤＭＡチップ４６は、データの書き込み要求のあったＣＭ１のＤＩＭＭへデータを転送する。また、ＤＭＡチップ４６は、データの書き込み要求のあったＣＭ１と冗長化されたＣＭ２のＤＩＭＭへデータを転送する（図１（１４））。これは、ＣＭ１の万一の故障に備えてデータをミラーリングしておくためである。そして、ＤＭＡチップ４６は、データについてＤＩＭＭへの転送を完了すると、自ＣＭ４のＣＰＵ４４および転送先のＣＭ１、２のＣＰＵにデータの転送完了を通知する。これにより、ＤＩＭＭ４３上の転送されたデータの領域が解放可能となる。なお、転送されるデータは、例えば、ＤＩＭＭ４３上の保護元のデータであるが、保護先のデータであっても良い。
【００３０】
ＤＩ４７は、ディスク６とのインタフェースである。
【００３１】
ＣＭ１は、ＣＡ１１と、メモリコントローラ１２と、ＤＩＭＭ１３と、ＣＰＵ１４と、ＰＣＩｅスイッチ１５と、ＤＭＡチップ１６と、ＤＩ１７とを有する。なお、ＣＭ２は、ＣＭ１と同様の構成であるため、その説明を省略する。
【００３２】
ＣＡ１１は、ホストとのインタフェースである。
【００３３】
メモリコントローラ１２は、後述するＤＩＭＭ１３へのデータの入出力制御を行う。このメモリコントローラ１２は、一例として、ＥＣＣ対応のコントローラであるが、ＥＣＣ非対応のコントローラであっても良い。なお、ＥＣＣ対応であるか否かは、内部に備えられたレジスタの値によって判別できる。例えば、ＥＣＣ対応である場合、レジスタの値が「１」に設定され、ＥＣＣ対応でない場合、レジスタの値が「０」に設定される。
【００３４】
ＤＩＭＭ１３は、メモリモジュールである。このＤＩＭＭ１３は、一例として、ＥＣＣ非対応のＤＩＭＭであるが、ＥＣＣ対応のＤＩＭＭであっても良い。仮に、ＤＩＭＭ１３が、ＥＣＣ非対応である場合、データがデータ化けであっても、データ化けを自動的に修正できず、データ化けのまま保持する。一方、仮にＤＩＭＭ１３が、ＥＣＣ対応である場合、データがデータ化けであっても、データ化けを自動的に修正できる。なお、ＥＣＣ対応であるか否かは、内部に備えられたＳＰＤ情報によって判別できる。
【００３５】
ＣＰＵ１４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。一例として、ＣＰＵ１４は、ＤＩＭＭ１３へのデータの転送完了通知をＣＭ４のＤＭＡチップ４６から受け取ると、後述するＤＩ１７へ、当該データをディスク５へ書き込むように要求する。また、ＣＰＵ１４は、ＤＩ１７から、当該データの書き込み要求に対してエラーが通知されると、自ＣＭと冗長化されたＣＭ２へ、ミラーリングされたデータの書き込みを要求する。これにより、ＣＰＵ１４は、当該データの書き込みにエラーがあっても、ＣＭ２にミラーリングされたデータを使ってディスク５への書き込みを完了させることが可能となる。また、ＣＰＵ１４は、ＣＭ２から、当該データの書き込み要求に対してエラーが通知されると、ＣＭ４のＣＰＵ４４に対して、当該データをコピーしたデータの書き込みを要求する。これにより、ＣＰＵ１４は、当該データの書き込みにエラーがあっても、コピーされたデータを使ってディスク５への書き込みを完了させることが可能となる。
【００３６】
ＤＩ１７は、ディスク５とのインタフェースである。例えば、ＤＩ１７は、ＣＰＵ１４から書き込み要求を受け取ると、ＤＩＭＭ１３から書き込み要求のデータを読み込み、読み込んだデータのＣＲＣをチェックする。ここで、ＤＩ１７は、読み込んだデータにデータ化けが検出されないと、当該データをディスク５に書き込む（図１（１５））。一方、ＤＩ１７は、読み込んだデータにデータ化けが検出されると、ＣＰＵ１４に対してエラーであることを通知する。なお、データがデータ化けとなるタイミングの一例として、ＣＭ１においてＤＩＭＭ１３がＥＣＣ非対応である場合に、データがＤＩＭＭ１３に書き込まれるタイミングがある。また、別の例としてＤＩＭＭ１３までの伝送路内やＤＩＭＭ１３からＤＩ１７までの伝送路内でのタイミングがある。
【００３７】
［書き込み処理のフローチャート］
次に、実施例１に係るストレージ装置９の書き込み処理のフローチャートを、図２および図３を参照して説明する。図２および図３は、実施例１に係るストレージ装置の書き込み処理のフローチャートを示す図である。なお、図２および図３では、ＣＭ１をＣＭ＃０とし、ＣＭ２をＣＭ＃１とし、ＣＭ３をＣＭ＃２とし、ＣＭ４をＣＭ＃３として説明するものとする。なお、ＣＭ＃３がホスト８からＣＭ＃０、＃１が管轄するディスク５へのデータの書き込み要求を受け取るものとする。
【００３８】
まず、ＣＭ＃３では、ＣＡ４１が、ホスト８から書き込み要求を受信したか否かを判定する（ステップＳ１１）。ホスト８から書き込み要求を受信していないと判定した場合（ステップＳ１１；Ｎｏ）、ＣＡ４１は、書き込み要求を受信するまで、判定処理を繰り返す。
【００３９】
一方、ホスト８から書き込み要求を受信したと判定した場合（ステップＳ１１；Ｙｅｓ）、ＣＡ４１は、ＤＩＭＭ４３へ書き込み要求のデータを転送する（ステップＳ１２）。このとき、ＣＡ４１は、書き込み要求のデータにＣＲＣが付加されていなければ、当該データにＣＲＣを付加してから、付加した後のデータをＤＩＭＭ４３へ転送する。ここで、説明の便宜上、ＤＩＭＭ４３へ転送したデータをＤａｔａ＃０とする。そして、ＣＡ４１は、転送完了時に、ＣＭ＃３のＣＰＵ４４へ転送完了を通知する（ステップＳ１３）。
【００４０】
続いて、ＣＭ＃３のＣＰＵ４４は、ＤＩＭＭ４３およびメモリコントローラ４２がＥＣＣ対応であるか否かを判定する（ステップＳ１３Ａ）。例えば、ＣＰＵ４４は、ＤＩＭＭ４３について、ＳＰＤ情報を用いてＥＣＣ対応であるか否かを判定する。また、ＣＰＵ４４は、メモリコントローラ４２について、内部に備えられたレジスタを用いてＥＣＣ対応であるか否かを判定する。そして、ＤＩＭＭ４３およびメモリコントローラ４２がＥＣＣ対応であると判定した場合（ステップＳ１３Ａ；Ｙｅｓ）、ＣＰＵ４４は、ＣＲＣのチェックをしないで、ステップＳ１７に移行する。一方、ＤＩＭＭ４３およびメモリコントローラ４２のどちらか一方でもＥＣＣ対応でないと判定した場合（ステップＳ１３Ａ；Ｎｏ）、ＣＰＵ４４は、ＣＲＣのチェックをすべく、ステップＳ１４に移行する。
【００４１】
ステップＳ１４では、ＣＭ＃３のＣＰＵ４４が、Ｄａｔａ＃０のＣＲＣのチェックをし、ＣＲＣのチェックが正常であるか否かを判定する（ステップＳ１４）。ＣＲＣのチェックが正常でないと判定した場合（ステップＳ１４；Ｎｏ）、ＣＰＵ４４は、ホスト８へ再送要求を送信する（ステップＳ１５）。ＣＲＣのチェックが正常でない場合とは、例えばデータ化けとなった場合である。そして、書き込み処理は、ステップＳ１１に移行する。
【００４２】
一方、ＣＲＣのチェックが正常であると判定した場合（ステップＳ１４；Ｙｅｓ）、ＣＰＵ４４は、ＤＩＭＭ４３の別領域にＤａｔａ＃０をコピーする（ステップＳ１６）。これは、データ化けが検出されなかったデータを保護するためである。ここで、説明の便宜上、別領域にコピーしたデータをＤａｔａ＃１とする。そして、ＣＰＵ４４は、ホスト８へ受信完了を送信する（ステップＳ１７）。
【００４３】
さらに、ＣＭ＃３では、ＣＰＵ４４が、ＣＭ＃３のＤＭＡチップ４６に対して、ＣＭ＃０へＤａｔａ＃０の転送を要求する（ステップＳ１８）。そして、ＤＭＡチップ４６は、ＣＭ＃０のＤＩＭＭ１３へＤａｔａ＃０を転送し、転送完了時にＣＭ＃３のＣＰＵ４４およびＣＭ＃０のＣＰＵ１４へ転送完了を通知する（ステップＳ１９）。
【００４４】
続いて、ＤＭＡチップ４６は、ＣＭ＃０と冗長化されたＣＭ＃１へＤａｔａ＃０を転送し、転送完了時にＣＭ＃３のＣＰＵ４４およびＣＭ＃１のＣＰＵへ転送完了を通知する（ステップＳ２１）。そして、ＣＭ＃３のＣＰＵ４４は、ＣＭ＃３のＤＭＡチップ４６からＣＭ＃０およびＣＭ＃１の転送完了通知を受けると、Ｄａｔａ＃０の領域を解放することが可能となる（ステップＳ２２）。
【００４５】
続いて、ＣＭ＃０では、ＤＭＡチップ４６からの転送完了通知を受け取ったＣＰＵ１４が、ＤＩ１７に対して、転送されたＤａｔａ＃０をディスク５へ書き込むように要求する（ステップＳ３１）。すると、ＤＩ１７は、ＤＩＭＭ１３からＤａｔａ＃０を読み込み、読み込んだＤａｔａ＃０をディスク５へ書き込む（ステップＳ３２）。
【００４６】
そして、ＤＩ１７は、Ｄａｔａ＃０のＣＲＣのチェックをし、ＣＲＣのチェックが正常であるか否かを判定する（ステップＳ３３）。ＣＲＣのチェックが正常であると判定した場合（ステップＳ３３；Ｙｅｓ）、ＤＩ１７は、ＣＰＵ１４へ書き込みの完了を通知する（ステップＳ３４）。そして、ＣＰＵ１４は、ＣＭ＃３のＣＰＵ４４へ書き込みの完了通知を送信する（ステップＳ３５）。
【００４７】
ＣＭ＃３では、ＣＰＵ４４が、ＣＭ＃０のＣＰＵ１４から書き込みの完了通知を受けると、書き込み要求がされたデータの書き込みが完了したので、Ｄａｔａ＃１の領域を解放することが可能となる（ステップＳ３６）。そして、書き込み処理は、次の書き込み要求を待つべく、ステップＳ１１に移行する。
【００４８】
ステップＳ３３では、ＣＲＣのチェックが正常でないと判定した場合（ステップＳ３３；Ｎｏ）、ＤＩ１７は、ＣＭ＃０のＣＰＵ１４へエラーであることを通知する（ステップＳ３７）。そして、ＣＭ＃０のＣＰＵ１４は、ＣＭ＃１へ、ミラーリングしたデータの書き込みを要求する（ステップＳ３８）。その後、ＣＭ＃０のＣＰＵ１４は、ＣＭ＃１から書き込みが正常である旨の通知を受信すると、ＣＭ＃３へ書き込みの完了を通知すべく、ステップＳ３４に移行する。
【００４９】
一方、ＣＭ＃０のＣＰＵ１４は、ＣＭ＃１から書き込みがエラーである旨の通知を受信すると、ＣＭ＃３のＣＰＵ４４へ、コピーしたＤａｔａ＃１の書き込みを要求する（ステップＳ３９）。そして、書き込み処理は、Ｄａｔａ＃０を用いて行った処理をＤａｔａ＃１を用いて行うべく、ステップＳ１８に移行する。
【００５０】
なお、実施例１に係るストレージ装置９では、メモリコントローラ４２がＥＣＣ対応であってＤＩＭＭ４３がＥＣＣ非対応の場合を説明した。しかしながら、ストレージ装置９では、メモリコントローラ４２がＥＣＣ非対応であってＤＩＭＭ４３がＥＣＣ対応であっても良いし、どちらもがＥＣＣ非対応であっても良い。すなわち、データに誤りがあっても自動的に修正できない場合であれば良い。
【００５１】
ところで、実施例１に係るストレージ装置９では、メモリコントローラ４２がＣＰＵ４４に内蔵していない場合について説明した。しかしながら、ストレージ装置９では、これに限定されず、メモリコントローラ４２がＣＰＵ４４に内蔵している場合であっても良い。そこで、実施例１に係るストレージ装置９の変形例として、メモリコントローラ４２がＣＰＵ４４に内蔵しているストレージ装置９Ａについて説明する。
【００５２】
［ストレージ装置の変形例の構成］
図４は、実施例１に係るストレージ装置の変形例のハードウェア構成を示す図である。なお、図１に示すストレージ装置９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。図１と図４とが異なるところは、ＣＭ４について、メモリコントローラ４２とＣＰＵ４４とをＣＰＵ＋メモリコントローラ４４Ａに変更した点にある。また、ＣＭ１について、メモリコントローラ１２とＣＰＵ１４とをＣＰＵ＋メモリコントローラ１４Ａに変更した点にある。
【００５３】
ＤＩＭＭ４３は、ＥＣＣ対応のメモリモジュールである。なお、ＥＣＣ対応であるか否かは、内部に備えられたＳＰＤ情報によって判別できる。
【００５４】
ＣＰＵ＋メモリコントローラ４４Ａは、メモリコントローラ内蔵のＣＰＵであり、１つの機能として、ＤＩＭＭ４３を制御する。そして、ＣＰＵ＋メモリコントローラ４４Ａは、一例としてＥＣＣ非対応であるとする。なお、ＥＣＣ対応であるか否かは、内部に備えられたレジスタの値によって判別できる。
【００５５】
また、ＣＰＵ＋メモリコントローラ４４Ａは、別の機能として、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。一例として、ＣＰＵ＋メモリコントローラ４４Ａは、ＣＡ４１からＤＩＭＭ４３へのデータの転送完了通知を受け取ると、当該データのＣＲＣをチェックする。ここで、ＣＰＵ＋メモリコントローラ４４Ａは、データにデータ化けが検出されないと、ＤＩＭＭ４３の別領域にデータをコピーする（図４（１２））。データを別領域にコピーするのは、データ化けが検出されなかった正常なデータを保護しておき、書き込み要求のデータの消失を防止するためである。
【００５６】
また、ＣＰＵ＋メモリコントローラ４４Ａは、ホスト８へ受信完了を送信する（図４（１３））。これにより、ＣＰＵ＋メモリコントローラ４４Ａは、受信完了をできるだけ早くホスト８側に送信することができ、ホスト８側では、書き込み要求のデータを削除し、データの書き込みに使用していた資源を別の作業に使用することができる。そして、ＣＰＵ＋メモリコントローラ４４Ａは、ＰＣＩｅスイッチ４５を介してＤＭＡチップ４６に対して、データの書き込み先のＣＭ＃０およびＣＭ＃１へデータを転送するように要求する（図４（１４））。なお、ＣＰＵ＋メモリコントローラ４４Ａは、データにデータ化けが検出されると、ホスト８にデータの再送を要求する。
【００５７】
ＣＰＵ＋メモリコントローラ１４Ａは、メモリコントローラ内蔵のＣＰＵであり、１つの機能として、ＤＩＭＭ１３を制御する。そして、ＣＰＵ＋メモリコントローラ１４Ａは、一例として、ＥＣＣ対応であるが、ＥＣＣ非対応であっても良い。なお、ＥＣＣ対応であるか否かは、内部に備えられたレジスタの値によって判別できる。
【００５８】
ＣＰＵ＋メモリコントローラ１４Ａは、別の機能として、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。一例として、ＣＰＵ＋メモリコントローラ１４Ａは、ＤＩＭＭ１３へのデータの転送完了通知をＣＭ４のＤＭＡチップ４６から受け取ると、ＤＩ１７へ、当該データをディスク５へ書き込むように要求する。また、ＣＰＵ＋メモリコントローラ１４Ａは、ＤＩ１７から、当該データの書き込み要求に対してエラーが通知されると、自ＣＭと冗長化されたＣＭ２へ、ミラーリングされたデータの書き込みを要求する。これにより、ＣＰＵ＋メモリコントローラ１４Ａは、当該データの書込みにエラーがあっても、ＣＭ２にミラーリングされたデータを使ってディスク５への書き込みを完了させることが可能となる。また、ＣＰＵ＋メモリコントローラ１４Ａは、ＣＭ２から、当該データの書き込み要求に対してエラーが通知されると、ＣＭ４のＣＰＵ＋メモリコントローラ４４Ａへ、当該データをコピーしたデータの書き込みを要求する。これにより、ＣＰＵ＋メモリコントローラ１４Ａは、当該データの書込みにエラーがあっても、コピーされたデータを使ってディスク５への書き込みを完了させることが可能となる。
【００５９】
なお、変形例における書き込み処理のフローチャートについては、図２および図３で説明したとおりであるので、その説明を省略する。すなわち、ＣＰＵ４４およびメモリコントローラ４２をＣＰＵ＋メモリコントローラ４４Ａに置き換え、ＣＰＵ１４およびメモリコントローラ１２をＣＰＵ＋メモリコントローラ１４Ａに置き換えれば良い。
【００６０】
［実施例１の効果］
上記実施例１によれば、ストレージ装置９では、ＤＩＭＭ４３およびメモリコントローラ４２の少なくとも一方がＥＣＣ非対応である場合に、ＣＭ４が、ホスト８からＣＭ１およびＣＭ２が管轄するストレージへのデータの書込み要求を受け付ける。ＣＭ４は、書込み要求のＣＲＣが付加されたデータを、メモリコントローラ４２を介してＤＩＭＭ４３に展開し、展開したデータに誤りが検出されるか否かを判定する。そして、ＣＭ４は、データに誤りが検出されないと判定された場合、展開されたＤＩＭＭ４３の領域と異なる領域にデータを退避する。そして、ＣＭ４は、書込み要求のデータの退避が完了した後、ホスト８へ書き込みが完了したことを通知する。かかる構成によれば、ストレージ装置９は、ＤＩＭＭ４３およびメモリコントローラ４２の少なくとも一方がＥＣＣ非対応であっても、書き込み要求のデータをＤＩＭＭ４３に展開した、誤りのないデータを退避するようにした。この結果、ストレージ装置９は、ホスト８へ書き込みが完了したことを通知しても、その後ディスク５への書き込みが完了するまで書き込み要求のデータが消失することを防止できる。
【００６１】
また、上記実施例１によれば、ＣＭ４は、ＤＩＭＭ４３に展開されたデータをＣＭ１およびＣＭ１と冗長化されたＣＭ２のＤＩＭＭへ転送する。そして、ＣＭ１は、ＤＩＭＭ１３へ転送されたデータをディスク５へ書き込む際、さらにデータに誤りが検出されるか否かを判定する。そして、ＣＭ１は、誤りが検出されたと判定する場合、ＣＭ２に対して、転送されたデータの書き込みを要求する。そして、ＣＭ１は、誤りが検出されなかったと判定する場合、誤りが検出されなかったデータをディスク５へ書き込む。かかる構成によれば、ストレージ装置９は、ＣＭ１でデータに誤りが検出されても、ディスク５への書き込みにＣＭ１と冗長化されたＣＭ２に転送されたデータを用いることにより、ディスク５への書き込みを正常に完了することが可能となる。
【００６２】
上記実施例１によれば、ＣＭ１は、ＣＭ２に要求したデータの書き込みが失敗したことを、ＣＭ２から受け付けた場合、ＣＭ４によって退避されたデータの書き込みをすべく、ＣＭ４に対して当該データの転送を要求する。かかる構成によれば、ストレージ装置９は、ＣＭ２でデータの書き込みに失敗しても、退避されたデータを用いることにより、ディスク５への書き込みを正常に完了することが可能となる。
【実施例２】
【００６３】
ところで、実施例１に係るストレージ装置９では、ＤＩＭＭおよびメモリコントローラの少なくとも一方がＥＣＣ非対応である場合に、データの書き込み要求があった際、書き込み要求のデータをＤＩＭＭにコピーするようにした。しかしながら、ストレージ装置９は、これに限定されず、ＤＩＭＭおよびメモリコントローラの少なくとも一方がＥＣＣ非対応である場合に、書き込み要求のみならず読み込み要求があった際、読み込み要求のデータをＤＩＭＭにコピーするようにしても良い。そこで、ＤＩＭＭおよびメモリコントローラの少なくとも一方がＥＣＣ非対応である場合に、書き込み要求のみならず読み込み要求があった際、読み込み要求のデータもＤＩＭＭにコピーするストレージ装置について説明する。
【００６４】
［ストレージ装置の構成］
図５は、実施例２に係るストレージ装置のハードウェア構成を示す図である。なお、図１に示すストレージ装置９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。ここでは、ＣＭ４が、ホスト８からＣＭ１、２が管轄するディスク５へのデータの書き込み要求を受け取った場合の書き込み動作の説明については省略する。以下では、ＣＭ４が、ホスト８からＣＭ１、２が管轄するディスク５への読み込み要求を受け取った場合の読み込み動作を中心に説明する。
【００６５】
ＣＰＵ１４は、ＣＭ４から読み込み要求を受け取ると、ＤＩ１７へディスク５からデータを読み込むように要求する。また、ＣＰＵ１４は、ＤＩＭＭ１３へのデータの転送完了通知をＤＩ１７から受け取ると、当該データのＣＲＣをチェックする。ここで、ＣＰＵ１４は、データにデータ化けが検出されないと、ＤＩＭＭ１３の別領域にデータをコピーする（図５（２２））。データを別領域にコピーするのは、データ化けが検出されなかった正常なデータを保護するためである。また、ＣＰＵ１４は、ＰＣＩｅスイッチ１５を介してＤＭＡチップ１６に対して、ホスト８と接続するＣＭ４へデータを転送するように要求する（図５（２３））。なお、ＣＰＵ１４は、データにデータ化けが検出されると、ＤＩ１７へデータの再送を依頼する。
【００６６】
ＤＭＡチップ１６は、ＣＰＵ１４からデータの転送要求を受け取ると、ホスト８と接続するＣＭ４のＤＩＭＭ４３へデータを転送する。そして、ＤＭＡチップ１６は、データについてＤＩＭＭ４３への転送を完了すると、自ＣＭ１のＣＰＵ１４および転送先のＣＭ４のＣＰＵ４４にデータの転送完了を通知する。これにより、ＤＩＭＭ１３上の転送されたデータの領域が解放可能となる。なお、転送されるデータは、例えば、ＤＩＭＭ１３上の保護元のデータであるが、保護先のデータであっても良い。
【００６７】
ＤＩ１７は、ＣＰＵ１４からデータの読み込み要求を受け取ると、読み込み要求に応じてディスク５からデータの読み込みを行う。そして、ＤＩ１７は、メモリコントローラ１２を介してデータをＤＩＭＭ１３へ書き込む（図５（２１））。また、ＤＩ１７は、データをＤＩＭＭ１３へ書き込む際、データに誤り検出符号が付加されていなければ、データに誤り検出符号を付加してからデータをＤＩＭＭ１３に転送する。また、ＤＩ１７は、データについてＤＩＭＭ１３への転送を完了すると、ＣＰＵ１４にＤＩＭＭ１３へのデータの転送完了を通知する。なお、データに付加される誤り検出符号は、例えばＣＲＣであるが、これに限定されるものではない。
【００６８】
ＣＡ４１は、ＣＰＵ４４からデータの転送要求を受け取ると、ＤＩＭＭ４３から転送するデータを読み込み、読み込んだデータのＣＲＣをチェックする。ここで、ＣＡ４１は、読み込んだデータにデータ化けが検出されないと、当該データをホスト８に引き渡す（図５（２４））。これにより、ホスト８からの読み込み要求に対する処理が完了する。一方、ＣＡ４１は、読み込んだデータにデータ化けが検出されると、ＣＰＵ４４に対してエラーであることを通知する。なお、データがデータ化けとなるタイミングの一例として、データがＤＩＭＭ４３に書き込まれるタイミングがある。また、別の例としてＤＩＭＭ４３に書き込まれるまでの伝送路内やＤＩＭＭ４３からＣＡ４１までの伝送路内でのタイミングがある。
【００６９】
ＣＰＵ４４は、ＣＭ１のＤＭＡチップ１６からデータの転送完了通知を受け取ると、当該データをホスト８に転送するようにＣＡ４１に要求する。また、ＣＰＵ４４は、ＣＡ４１から、データの転送要求に対してエラーが通知されると、ＣＭ１のＣＰＵ１４へ当該データをコピーしたデータの再送を要求する。これにより、ＣＰＵ４４は、転送要求のデータがデータ化けであっても、コピーされたデータを使ってホスト８への転送を完了させることが可能となる。
【００７０】
［読み込み処理のフローチャート］
次に、実施例２に係るストレージ装置９Ｂの読み込み処理のフローチャートを、図６および図７を参照して説明する。図６および図７は、実施例２に係るストレージ装置の読み込み処理のフローチャートを示す図である。なお、図６および図７では、ＣＭ１をＣＭ＃０とし、ＣＭ２をＣＭ＃１とし、ＣＭ３をＣＭ＃２とし、ＣＭ４をＣＭ＃３として説明するものとする。なお、ＣＭ＃３がホスト８からＣＭ＃０、＃１が管轄するディスク５への読み込み要求を受け取るものとする。
【００７１】
まず、ＣＭ＃３では、ホスト８から読み込み要求を受信したか否かを判定する（ステップＳ４１）。ホスト８から読み込み要求を受信していないと判定した場合（ステップＳ４１；Ｎｏ）、ＣＭ＃３では、読み込み要求を受信するまで、判定処理を繰り返す。一方、ホスト８から読み込み要求を受信したと判定した場合（ステップＳ４１；Ｙｅｓ）、ＣＭ＃３では、ＣＭ＃３を経由してＣＭ＃０のＣＰＵ１４へ読み込み要求を通知する（ステップＳ４２）。
【００７２】
続いて、ＣＭ＃０のＣＰＵ１４は、ＣＭ＃０のＤＩ１７へディスク５からデータを読み込むよう要求する（ステップＳ４３）。そして、ＤＩ１７は、要求に応じてディスク５からデータ読み込み、読み込んだデータをＤＩＭＭ１３へ転送する（ステップＳ４４）。このとき、Ｄ１１７は、読み込んだデータにＣＲＣが付加されていなければ、当該データにＣＲＣを付加してから、付加した後のデータをＤＩＭＭ１３へ転送する。ここで、説明の便宜上、ＤＩＭＭ１３へ転送したデータをＤａｔａ＃０とする。そして、ＤＩ１７は、転送完了時に、ＣＭ＃０のＣＰＵ１４へ転送完了を通知する（ステップＳ４５）。
【００７３】
続いて、ＣＭ＃０のＣＰＵ１４は、ＤＩＭＭ１３およびメモリコントローラ１２がＥＣＣ対応であるか否かを判定する（ステップＳ４５Ａ）。例えば、ＣＰＵ１４は、ＤＩＭＭ１３について、ＳＰＤ情報を用いてＥＣＣ対応であるか否かを判定する。また、ＣＰＵ１４は、メモリコントローラ１２について、内部に備えられたレジスタを用いてＥＣＣ対応であるか否かを判定する。そして、ＤＩＭＭ１３およびメモリコントローラ１２がＥＣＣ対応であると判定した場合（ステップＳ４５Ａ；Ｙｅｓ）、ＣＰＵ１４は、ＣＲＣのチェックをしないで、ステップＳ４９に移行する。一方、ＤＩＭＭ１３およびメモリコントローラ１２のどちらか一方でもＥＣＣ対応でないと判定した場合（ステップＳ４５Ａ；Ｎｏ）、ＣＰＵ１４は、ＣＲＣのチェックをすべく、ステップＳ４６に移行する。
【００７４】
ステップＳ４６では、ＣＭ＃０のＣＰＵ１４が、Ｄａｔａ＃０のＣＲＣのチェックをし、ＣＲＣのチェックが正常であるか否かを判定する（ステップＳ４６）。ＣＲＣのチェックが正常でないと判定した場合（ステップＳ４６；Ｎｏ）、ＣＰＵ１４は、ＤＩ１７へ再送を依頼する（ステップＳ４７）。ＣＲＣのチェックが正常でない場合とは、例えばデータ化けとなった場合である。そして、読み込み処理は、ステップＳ４４に移行する。
【００７５】
一方、ＣＲＣのチェックが正常であると判定した場合（ステップＳ４６；Ｙｅｓ）、ＣＰＵ１４は、ＤＩＭＭ１３の別領域にＤａｔａ＃０をコピーする（ステップＳ４８）。これは、データ化けが検出されなかったデータを保護するためである。ここで、説明の便宜上、別領域にコピーしたデータをＤａｔａ＃１とする。そして、ＣＰＵ１４は、ＤＭＡチップ１６に対して、ＣＭ＃３へＤａｔａ＃０の転送を要求する（ステップＳ４９）。そして、ＤＭＡチップ１６は、ＣＭ＃３のＤＩＭＭ４３へＤａｔａ＃０を転送し、転送完了時にＣＭ＃３のＣＰＵ４４およびＣＭ＃０のＣＰＵ１４へ転送完了を通知する（ステップＳ５０）。
【００７６】
続いて、ＣＭ＃０では、転送完了通知を受け取ったＣＰＵ１４が、Ｄａｔａ＃０の領域を解放することが可能となる（ステップＳ５１）。
【００７７】
続いて、ＣＭ＃３では、転送完了通知を受け取ったＣＰＵ４４が、ＣＡ４１に対して、転送されたＤａｔａ＃０をホスト８に転送するように要求する（ステップＳ５２）。すると、ＣＡ４１は、ＤＩＭＭ４３からＤａｔａ＃０を読み込み、読み込んだＤａｔａ＃０をホスト８へ引き渡す（ステップＳ５３）。
【００７８】
このとき、ＣＡ４１は、Ｄａｔａ＃０のＣＲＣをチェックし、ＣＲＣのチェックが正常であるか否かを判定する（ステップＳ５４）。ＣＲＣのチェックが正常であると判定した場合（ステップＳ５４；Ｙｅｓ）、ＣＡ４１は、ＣＰＵ４４へ読み込みの完了を通知する（ステップＳ５５）。そして、ＣＰＵ４４は、ＣＭ＃０のＣＰＵ１４へ読み込みの完了通知を送信する（ステップＳ５６）。
【００７９】
ＣＭ＃０では、ＣＰＵ１４が、ＣＭ＃３のＣＰＵ４４から読み込みの完了通知を受けると、読み込み要求の読み込みが完了したので、Ｄａｔａ＃１の領域を解放することが可能となる（ステップＳ５７）。そして、読み込み処理は、次の読み込み要求を待つべく、ステップＳ１４１に移行する。
【００８０】
ステップＳ５４では、ＣＲＣのチェックが正常でないと判定した場合（ステップＳ５４；Ｎｏ）、ＣＡ４１は、ＣＭ＃３のＣＰＵ４４へエラーであることを通知する（ステップＳ５８）。そして、ＣＭ＃３のＣＰＵ４４は、ＣＭ＃０のＣＰＵ１４へ、コピーしたＤａｔａ＃１の再送を要求する（ステップＳ５９）。そして、読み込み処理は、Ｄａｔａ＃０を用いて行った処理をＤａｔａ＃１を用いて行うべく、ステップＳ４９に移行する。
【００８１】
［実施例２の効果］
上記実施例２によれば、ストレージ装置９Ｂでは、ＣＭ１が、ＣＭ４を経由してホスト８からデータの読み込み要求を受け付けると、読み込み要求に応じてディスク５から読み込んだデータを、メモリコントローラ１２を介してＤＩＭＭ１３に展開する。そして、ＣＭ１は、展開したデータに誤りが検出されるか否かを判定する。そして、ＣＭ１は、データに誤りが検出されなかったと判定した場合、展開したＤＩＭＭ１３の領域と異なる領域にデータを退避する。そして、ＣＭ１は、読み込み要求のデータの退避が完了した後、誤りが検出されなかったデータをＣＭ４へ転送する。かかる構成によれば、ストレージ装置９Ｂは、読み込み要求に応じて読み込んだデータをＤＩＭＭ１３に展開した、誤りのないデータを退避するようにした。この結果、ストレージ装置９Ｂは、ホスト８への応答までに、ＣＭ４へ転送したデータに何らかの理由で誤りが検出されても、退避したデータを用いることで、ホスト８の読み込み性能を高速化できる。
【００８２】
また、上記実施例２によれば、ストレージ装置９Ｂでは、ＣＭ４が、ＣＭ１から転送されたデータをホスト８へ引き渡す際、さらにデータに誤りが検出されるか否かを判定する。そして、ＣＭ４は、データに誤りが検出されたと判定した場合、ＣＭ１に対して退避されたデータの再送を要求する。そして、ＣＭ４は、データに誤りが検出されなかったと判定した場合、誤りが検出されなかったデータをホスト８へ引き渡す。かかる構成によれば、ストレージ装置９Ｂは、ＣＭ４でデータに誤りが検出されても、ホスト８への引き渡しに、退避したデータを用いることにより、読み込み要求に対する応答を確実に且つ高速に完了することが可能となる。
【００８３】
［その他］
なお、実施例１、２では、ＣＭ４が、ホスト８から別のＣＭが管轄するディスク５へのデータの書き込み要求を受け取った場合について説明した。しかしながら、ＣＭ４は、これに限定されず、ホスト８から自ＣＭが管轄するディスク６へのデータの書き込み要求を受け取った場合であっても良い。かかる場合、ＣＰＵ４４は、ＣＡ４１からＤＩＭＭ４３へのデータの転送完了通知を受け取ると、当該データにデータ化けが検出されなければ、ＤＩＭＭ４４の別領域にデータをコピーする。そして、ＣＰＵ４４は、ホスト８へ受信完了を送信する。その後、ＣＰＵ４４は、ＤＩ４７へ当該データをディスク６へ書き込むように要求するようにすれば良い。これにより、ＣＭ４は、ＤＩＭＭ４３がＥＣＣ非対応であっても、ＤＩＭＭ４４の別領域に誤りのないデータが退避されているので、ディスク６への書き込みが完了するまで書き込み要求のデータが消失することを防止できる。
【００８４】
また、実施例２では、ＣＭ４が、ホスト８から別のＣＭが管轄するディスク５への読み込み要求を受け取った場合について説明した。しかしながら、ＣＭ４は、これに限定されず、ホスト８から自ＣＭが管轄するディスク６への読み込み要求を受け取った場合であっても良い。かかる場合、ＣＰＵ４４は、ホスト８から読み込み要求を受け取ると、ＤＩ４７へディスク６からデータを読み込むように要求する。そして、ＣＰＵ４４は、ＤＩ４７から、ＤＩＭＭ４３へのデータの転送完了通知を受け取ると、当該データのＣＲＣをチェックする。ここで、ＣＰＵ４４は、データにデータ化けが検出されないと、ＤＩＭＭ４３の別領域にデータをコピーし、ＣＡ４１に対してデータ化けが検出されなかったデータをホスト８に転送するように要求するようにすれば良い。これにより、ＣＭ４は、ホスト８に転送するデータに何らかの理由で誤りが検出されても、退避したデータを用いることで、ホスト８の読み込み性能を高速化できる。
【００８５】
また、実施例１では、ＣＭ１への書き込みデータをホスト８からＣＭ４で受信した場合の処理を説明したが、これに限定されず、ＣＭ１への書き込みデータをホストからＣＭ１で受信した場合であっても良い。
【００８６】
また、実施例では、ストレージ装置９、９Ａ、９Ｂが、４台のＣＭを、２台ずつに冗長化するものと説明した。しかしながら、ストレージ装置９、９Ａ、９Ｂは、これに限定されず、６台のＣＭを複数台ずつに冗長化しても良いし、８台のＣＭを複数台ずつに冗長化しても良いし、１０台のＣＭを複数台ずつに冗長化しても良い。
【００８７】
以上説明した実施形態及びその変形例に関し、更に以下の付記を開示する。
【００８８】
（付記１）ストレージと、
前記ストレージへの書き込みデータを受信する制御装置と、
を備え、
前記制御装置は、
メモリと、
前記メモリへのデータの入出力制御を行うメモリコントローラと、
前記メモリおよび前記メモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、前記ストレージへのデータ書き込み処理時に、書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、を有する
ことを特徴とするストレージ装置。
【００８９】
（付記２）前記ストレージへの書き込みデータを受信する第１の制御装置と、前記書き込みデータの書き込み先のストレージへの入出力制御を行う第２の制御装置が異なる場合において、
前記第１の制御装置は、
前記メモリに展開されたデータを前記第２の制御装置および前記第２の制御装置と冗長化された第３の制御装置のメモリへ転送する転送部を、さらに有し、
前記第２の制御装置は、
前記転送部によって自装置のメモリへ転送されたデータを前記ストレージへ書き込む際、さらに前記データに誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、自装置のメモリへ転送されたデータに誤りが検出された場合、前記第３の制御装置に対して前記転送部によって転送されたデータの書き込みを要求する書込要求部と、
前記データ判定部による判定の結果、自装置のメモリへ転送されたデータに誤りが検出されなかった場合、誤りが検出されなかったデータを前記ストレージへ書き込むデータ書込部とをさらに有する
ことを特徴とする付記１に記載のストレージ装置。
【００９０】
（付記３）前記第２の制御装置は、
前記書込要求部によって要求された書き込みが失敗したことを、前記第３の制御装置から受け付けた場合、前記退避部によって退避されたデータの書き込みをすべく、前記第１の制御装置に対して当該データの転送を要求する転送要求部をさらに有する
ことを特徴とする付記２に記載のストレージ装置。
【００９１】
（付記４）前記第２の制御装置は、
前記第１の制御装置を経由した読込み処理時に、前記ストレージから読み込んだデータを、前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、
前記退避部によって退避が完了した後、前記誤りが検出されなかったデータを前記第１の制御装置へ転送する転送部とをさらに有する
ことを特徴とする付記３に記載のストレージ装置。
【００９２】
（付記５）前記第１の制御装置は、
前記転送部によって転送されたデータをホストへ引き渡す際、さらに前記データに誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部によって前記データに誤りが検出されたと判定された場合、前記第２の制御装置に対して前記退避部によって退避されたデータの再送を要求する再送要求部と、
前記データ判定部によって前記データに誤りが検出されなかったと判定された場合、誤りが検出されなかったデータを前記ホストへ引き渡すデータ引渡部とをさらに有する
ことを特徴とする付記４に記載のストレージ装置。
【００９３】
（付記６）メモリと、
前記メモリへのデータの入出力制御を行うメモリコントローラと、
前記メモリおよび前記メモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、ストレージへのデータ書き込み処理時に、書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定するデータ判定部と、
前記データ判定部による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する退避部と、
を有することを特徴とする制御装置。
【００９４】
（付記７）前記データ判定部は、読込み処理時に、前記ストレージから読み込んだデータを、前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定し、
前記退避部は、前記データ判定部によって前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する
ことを特徴とする付記６に記載の制御装置。
【００９５】
（付記８）ストレージへの書き込みデータを受信し、
メモリおよび前記メモリへのデータの入出力制御を行うメモリコントローラの少なくとも一方が誤り訂正機能を有しない場合に、該受信する処理によって受信された書き込みデータにおけるストレージへのデータ書き込み処理時に、当該書き込みデータに前記誤り訂正機能と異なる誤り検出方式で用いられる誤り検出符号が付加されたデータを前記メモリに前記メモリコントローラを介して展開し、誤りが検出されるか否かを判定し、
該判定する処理による判定の結果、前記メモリに展開されたデータに誤りが検出されなかった場合、前記誤りが検出されなかったデータを予め定められた記憶領域に退避する
各処理を実行することを特徴とするデータ保護方法。
【符号の説明】
【００９６】
１〜４    ＣＭ
５、６    ディスク
７      ＰＣＩｅスイッチ
８      ホスト
１３、４３    ＤＩＭＭ
１２、４２    メモリコントローラ
１１、４１    ＣＡ
１７、４７    ＤＩ
１６、４６    ＤＭＡチップ
１５、４５    ＰＣＩｅスイッチ
１４、４４    ＣＰＵ
１４Ａ、４４Ａ    ＣＰＵ＋メモリコントローラ
９、９Ａ、９Ｂ    ストレージ装置
【図１】
2014032516.tif 000003
【図２】
2014032516.tif 000004
【図３】
2014032516.tif 000005
【図４】
2014032516.tif 000006
【図５】
2014032516.tif 000007
【図６】
2014032516.tif 000008
【図７】
2014032516.tif 000009
【図８】
2014032516.tif 000010
【図９】
2014032516.tif 000011