本発明は、制御装置、ストレージ装置および制御方法に関する。
従来から、RAID(Redundant Arrays of Inexpensive Disks)装置を制御するコントローラは、電源(例えばAC電源)の停止や瞬断によって揮発性メモリ(以降、「メモリ」と略記する)のデータが失われ、稼動に支障をきたしたりするのを防止するため、例えばバッテリ等のバックアップ電源によってメモリのデータを保護して、保護されたデータがある旨を不揮発性メモリに保持することがある。
図12は、停電が発生した際にバッテリから電源供給を行うRAID装置のコントローラの構成を示す図である。図12に示すように、コントローラは、制御部(例えばCPU)と、メモリと、不揮発性メモリ(不揮発領域)と、バッテリと、を備える。制御部が上位装置(図示しない)から指示を受けてメモリを用いて入出力処理を行っている最中に、停電が発生することがある。このとき、メモリは、入出力処理中のデータを保護するためにバックアップ電源(バッテリ)から給電し、制御部は、メモリに入出力処理中のデータがあることを示す情報を電源からの電力が途絶える前に不揮発性メモリに保持する。これにより、電源からの電力が途絶える直前に制御部によって処理されていたデータがメモリにあることがわかるため、メモリ内のデータの信頼性を保障することができる。そして、コントローラは、停電から復旧した後、不揮発性メモリに保持された情報を参照して、参照された情報がメモリにデータがあることを示す情報である場合、停電発生直前にメモリに保持されていたデータを活用して処理を続行する。
また、RAID装置の中には、データの信頼性を向上させるために、コントローラが冗長化されているものがある。例えば、図13に示すRAID装置では、コントローラが二重化され、二重化されたそれぞれのコントローラが同期をとって同一内容のデータを磁気ディスク装置に記憶する。
このようなRAID装置では、二重化された双方のコントローラへの電源からの給電が同時に停止される場合がある。例えば、停電が発生した場合である。この場合、図14に示すように、双方のコントローラが停電による異常を検知したとき、各コントローラは、メモリにデータがあることを示す情報を不揮発性メモリに保持する。そして、双方のコントローラは、停電から復旧した後、自己の不揮発性メモリに保持された情報をそれぞれ参照して、参照された情報がメモリにデータがあることを示す情報である場合、停電発生直前にメモリに保持されていたデータを活用して処理を続行する。
また、同様のRAID装置において、二重化された双方のコントローラへの電源からの給電が異なる時間に停止される場合がある。例えば、図15に示すように、一方のコントローラ10が他方のコントローラ30より先行して異常を検出すると、コントローラ10は、メモリにデータがあることを示す情報を自己の不揮発性メモリに保持するとともに、コントローラ30に対して異常が検出されたことを通知する(ステップ(1))。すると、コントローラ30は、コントローラ10との同期を停止して(ステップ(2))、コントローラ10の不揮発性メモリにコントローラ10のメモリのデータが最新でないことを示す情報を格納する(ステップ(3))。
その後、コントローラ30が異常を検出すると、自己のメモリにデータがあることを示す情報を自己の不揮発性メモリに保持する。そして、電源が再投入されると、コントローラ10は、自己の不揮発性メモリに保持された情報を参照して、参照された情報によって自己のメモリのデータが最新でないと判断できるため、当該データを破棄する。一方、コントローラ30は、自己の不揮発性メモリに保持された情報を参照して、参照された情報に自己のメモリのデータが最新でない旨の情報がないため、異常発生直前にメモリに保持されていたデータを活用して処理を続行する。
しかしながら、RAID装置のコントローラに電源からの給電が一旦停止された後に復旧した場合、不揮発性メモリを利用してメモリのデータを活用する従来の技術では、コントローラは、不揮発性メモリに異常が発生したとき、不揮発性メモリに保持されたメモリのデータに関する情報を読み出せないため、メモリのデータを有効に活用することができないという問題がある。
すなわち、RAID装置のコントローラは、停電が発生すると、停電発生直前の入出力処理中のデータがメモリにあることを示す情報を不揮発性メモリに保持するが、その後何らかの原因により不揮発性メモリから当該情報を読み出せなくなると、メモリにデータがあるか否かを判断することができなくなる。その結果、コントローラは、停電から復旧しても、メモリのデータを信頼して良いのか悪いのかを判断することができず、メモリのデータを活用することができない。これは、二重化された双方のコントローラに給電が停止されるような異常が発生したときであっても同じである。
本発明は、上記に鑑みてなされたものであって、給電停止時にメモリのデータの信頼性の有無を保持しておく不揮発性メモリに異常が生じても、給電開始時にメモリのデータを有効に活用することができる制御装置、ストレージ装置および制御方法を提供することを目的とする。
上述した問題を解決し、目的を達成するために、制御装置は、上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、を備えた構成を採る。
かかる構成によれば、制御装置は、保持手段によって保持されたデータに誤り検出符号が付加されていることがわかると、主電源から保持手段への給電が停止された直前に処理に用いられていたデータが保持手段に保持されていることがわかる。
以上により、制御装置、ストレージ装置および制御方法は、給電停止時にメモリのデータの信頼性の有無を保持しておく不揮発性メモリに異常が生じても、給電開始時にメモリのデータを有効に活用することができるという効果を奏する。
以下に、本発明に係る制御装置、ストレージ装置および制御方法の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。
図1は、実施例1に係るストレージ装置の例としてRAID装置を含むRAIDシステムの全体構成の一例を示す図である。図1に示すように、RAID装置2は、RAID装置2の上位装置であるサーバ1と接続され、制御装置10と、記憶装置20と、を備える。制御装置10は、サーバ接続インタフェース部11と、制御部12と、メモリ13と、フラッシュメモリ14と、バッテリ15と、電源管理部16と、を備える。制御装置10は、サーバ1からの入出力要求を取得して、取得された入出力要求に応じて、データを記憶装置20に入出力する入出力処理を行う。
サーバ接続インタフェース部11は、サーバ1とRAID装置2とがデータのやりとりを行うインタフェースであり、例えばポート等を含んでいる。
制御部12は、サーバ1からの入出力要求に応じた処理中に、AC電源からメモリ13への給電が停止される要因となる異常を検知すると、メモリ13にデータがあることを示す情報をフラッシュメモリ14に保持する。その後、制御部12は、図示していないが、自装置をシャットダウンする。ここで、AC電源からメモリ13への給電が停止される要因となる異常とは、例えば停電、停電以外の給電異常および制御装置10内に搭載される装置(CPU(Central Processing Unit)等)の故障等の異常をいい、以降「メモリ給電異常」と略記するものとする。また、メモリ13にデータがあることを示す情報とは、「メモリ給電異常」が検知される直前に入出力処理の対象となっていたデータがメモリ13にあることを、シャットダウンされた後復旧した制御部12に知らせる情報である。この情報がフラッシュメモリ14に保持されていれば、制御部12は、シャットダウンされた後復旧したとき、「メモリ給電異常」が検知される直前に入出力処理の対象となっていたデータを用いて、入出力処理を継続することができる。
制御部12は、AC電源からメモリ13への給電が一旦停止された後に復旧したとき、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、制御部12は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する。このとき、制御部12は、フラッシュメモリ14が異常である旨を検知すると、メモリ13に入出力処理の対象となっていたデータがあるか否かを判断するのにフラッシュメモリ14に保持された情報を利用することができないため、メモリ13の任意のアドレスからデータを読み出す。例えば、制御部12は、メモリ13の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、制御部12は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行う。制御部12は、データの誤りが検出されないとの結果が得られたとき、データに誤り検出符号が付加されていることがわかり、AC電源からメモリ13への給電が停止された直前に入出力処理の対象となっていたデータがメモリ13に保持されていることがわかるため、メモリ13に保持されたデータを用いて入出力処理を継続する。一方、制御部12は、データに誤りが検出されるとの結果が得られたとき、メモリ13内のデータに誤り検出符号が付加されていない無意味なデータである可能性があるため、メモリ13を初期化する。なお、誤り検出符号は、例えばECC(Error Correcting Code)であるが、これに限定されない。
メモリ13は、AC電源またはバッテリ15から給電されなくなると保持されたデータを失ってしまう揮発性メモリであり、例えばDRAM(Dynamic Random Access Memory)を含んでいる。メモリ13は、制御部12によって入出力処理がされているとき「メモリ給電異常」によってAC電源から給電が途絶えると、入出力処理に支障が生じるのを防止するためにシャットダウン前にバッテリ15から給電され、入出力処理によって用いられていたデータを保持する。
フラッシュメモリ14は、給電されなくても保持されたデータを失わない不揮発性メモリである。
バッテリ15は、主電源をバックアップするバックアップ電源であり、入出力処理中にAC電源から給電が停止されたメモリ13にAC電源の代わりに給電する。
電源管理部16は、AC電源の電圧等を常時監視して、停電や電源異常が発生したか否かを判断して、停電や電源異常が発生したと判断したとき、異常の要因とともに異常である旨の通知を制御部12に出力する。ここで、停電以外の電源異常には、例えば電圧異常または静電気その他の要因による瞬断による異常等が含まれるが、これに限定されない。
ハードディスク制御インタフェース部(以降、HDD制御インタフェース部)18は、制御装置10と記憶装置20との間のデータのやりとりを行うインタフェースであり、例えばポート等を含んでいる。
記憶装置20は、複数のハードディスクから構成され、各ハードディスクにデータを記憶している。
次に、図2は、実施例1に係る制御部の構成を示す機能ブロック図である。図2に示すように、制御部12は、異常処理部120と、復旧処理部130と、を備える。
異常処理部120は、「メモリ給電異常」時の異常処理を行い、異常監視部121と、データ有り情報書込部122と、を備える。
異常監視部121は、電源管理部16や制御装置10内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」を検知すると、「メモリ給電異常」であることをデータ有り情報書込部122に通知する。例えば、異常監視部121は、「メモリ給電異常」の要因とともに「メモリ給電異常」である旨を示す情報を、電源管理部16や制御装置10内の個々の装置から取得すると、「メモリ給電異常」であることをデータ有り情報書込部122に通知する。
データ有り情報書込部122は、「メモリ給電異常」であることが異常監視部121から通知されると、メモリ13に入出力処理の対象となっていたデータがあるために、メモリ13にデータがあることを示す情報をフラッシュメモリ14に格納する。なお、データ有り情報書込部122は、メモリ13に入出力処理の対象となっていたデータがあるために、メモリ13にデータがあることを示す特定コードを、メモリ13に書き込んでも良い。この特定コードは、あらかじめ定められた数字であっても良いし、記号であっても良い。
復旧処理部130は、「メモリ給電異常」によってシャットダウンされた後の復旧処理を行い、起動検知部131と、データ有り判定部(不揮発メモリ)132と、データ有り判定部(揮発メモリ)133と、処理継続部134と、メモリ初期化部135と、を備える。
起動検知部131は、AC電源が投入されたことを検知すると、AC電源が投入されたことをデータ有り判定部(不揮発メモリ)132に通知する。
データ有り判定部(不揮発メモリ)132は、フラッシュメモリを用いて、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する。このとき、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常である旨を検知すると、メモリ13に入出力処理の対象となっていたデータがあるか否かを判断することができないため、フラッシュメモリ14が異常である旨をデータ有り判定部(揮発メモリ)133に通知する。また、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていると判定されたとき、メモリ13に入出力処理の対象となっていたデータがあることを処理継続部134に通知する。一方、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていないと判定されたとき、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
データ有り判定部(揮発メモリ)133は、フラッシュメモリ14が異常であるとき、メモリ13を用いて、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部(揮発メモリ)133は、フラッシュメモリ14が異常である旨がデータ有り判定部(不揮発メモリ)132から通知されると、メモリ13の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、データ有り判定部(揮発メモリ)133は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行う。ここで、データ有り判定部(揮発メモリ)133は、データの誤りが検出されないとの結果が得られた場合に、メモリ13内のデータに誤り検出符号が付加されていることがわかり、AC電源からメモリ13への給電が停止された直前に入出力処理の対象となっていたデータがメモリ13に保持されていることがわかるため、メモリ13に入出力処理の対象となっていたデータがあることを処理継続部134に通知する。一方、データ有り判定部(揮発メモリ)133は、データに誤りが検出されるとの結果が得られた場合に、メモリ13内のデータに誤り検出符号が付加されていない無意味なデータである可能性があるため、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
ここで、データ有り判定部(揮発メモリ)133は、メモリ13に入出力処理の対象となっていたデータがあるか否かをさらに正確に確かめるために、異常処理部120によってメモリ13に特定コードが保持される場合、メモリ13に特定コードが保持されているか否かを判定しても良い。この場合、データ有り判定部(揮発メモリ)133は、メモリ13に特定コードが保持されていれば、AC電源からメモリ13への給電が停止された直前に入出力処理の対象となっていたデータがメモリ13に保持されていることがわかるため、メモリ13に入出力処理の対象となっていたデータがあることがわかることになる。なお、データ有り判定部(揮発メモリ)133は、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定するために、任意のアドレスからデータを読み出した結果および特定コードを読み出した結果のどちらか一方を使用しても良いし、両方を使用しても良い。
処理継続部133は、メモリ13に入出力処理の対象となっていたデータがあることがデータ有り判定部(不揮発メモリ)132またはデータ有り判定部(揮発メモリ)133から通知されると、メモリ13に保持されたデータを用いて、入出力処理を継続する。
メモリ初期化部134は、メモリ13に入出力処理の対象となっていたデータがないことがデータ有り判定部(不揮発メモリ)132またはデータ有り判定部(揮発メモリ)133から通知されると、メモリ13を初期化する。
次に、実施例1に係る制御装置の処理を、図3を参照して説明する。図3は、実施例1に係る制御装置の処理を示すフローチャートを示す図である。
まず、異常処理部120の異常監視部121は、電源管理部16や制御装置10内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する(S110)。このとき、異常監視部121は、「メモリ給電異常」が検知されないとき(S110No)、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
一方、異常監視部121は、「メモリ給電異常」が検知されるとき(S110Yes)、「メモリ給電異常」であることをデータ有り情報書込部122に通知する。そして、「メモリ給電異常」であることが通知されたデータ有り情報書込部122は、メモリ13にデータがあることを示す情報をフラッシュメモリ14に書き込む(S120)。
そして、バッテリ15は、メモリ13に給電を開始する(S130)。その後、制御装置10はシャットダウンして、AC電源からの給電が停止される。
その後、制御装置10がAC電源から再び給電されると、起動検知部131は、AC電源が投入されたことを検知して(S140)、AC電源が投入されたことをデータ有り判定部(不揮発メモリ)132に通知する。
AC電源が投入されたことが通知されたデータ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常であるか否かを判定する(S150)。具体的には、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14に対してメモリ13にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
フラッシュメモリ14が異常であると判定されると(S150Yes)、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常である旨をデータ有り判定部(揮発メモリ)133に通知する。
フラッシュメモリ14が異常である旨がデータ有り判定部(不揮発メモリ)132から通知されたデータ有り判定部(揮発メモリ)133は、メモリ13の任意のアドレスからデータを読み出して、読み出されたデータの誤りが検出されるか否かを判定する(S160)。具体的には、データ有り判定部(揮発メモリ)133は、メモリ13の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、データ有り判定部(揮発メモリ)133は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行って、データの誤りが検出されないとの結果が得られるか否かを判定する。
データの誤りが検出されないと判定されると(S160No)、メモリ13のデータに誤り検出符号が付加されていることがわかるため、データ有り判定部(揮発メモリ)133は、メモリ13に入出力処理の対象となっていたデータがあることを処理継続部134に通知して、処理継続部134は、メモリ13に保持されたデータを用いて、入出力処理を継続する(S170)。
一方、データに誤りが検出されると判定されると(S160Yes)、データ有り判定部(揮発メモリ)133は、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知して、メモリ初期化部135は、メモリ13を初期化する(S180)。
また、フラッシュメモリ14が正常であると判定されると(S150No)、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する(S190)。
メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていると判定されると(S190Yes)、データ有り判定部(不揮発メモリ)132は、メモリ13に入出力処理の対象となっていたデータがあることを処理継続部134に通知して、処理継続部134は、メモリ13に保持されたデータを用いて、入出力処理を継続する。
一方、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていないと判定されると(S190No)、データ有り判定部(不揮発メモリ)132は、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知して、メモリ初期化部135は、メモリ13を初期化する。
以上のように本実施例によれば、制御装置10は、サーバ1から指示された入出力処理中に、当該入出力処理に用いられるデータをAC電源から給電してメモリ13に格納している。そして、制御装置10は、AC電源からメモリ13への給電が停止された後再びAC電源からの給電が開始されたとき、メモリ13によって保持されたデータに誤り検出符号が付加されているか否かを判定する。そして、制御装置10は、判定された結果、メモリ13によって保持されたデータに誤り検出符号が付加されていると判定されたとき、メモリ13によって保持されたデータを用いて入出力処理を継続する。
このようにして、制御装置10は、メモリ13によって保持されたデータに誤り検出符号が付加されていることがわかると、AC電源からメモリ13への給電が停止された直前に入出力処理に用いられていたデータがメモリ13に保持されていることがわかるため、給電開始時にメモリのデータを有効に活用することができる。その結果、制御装置10は、仮にフラッシュメモリ14に異常があってフラッシュメモリ14に保持されたメモリ13に関連する情報を参照できなくても、AC電源からメモリ13への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
ところで、上記の実施例1では、シングル構成の制御装置10がAC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、メモリ13に関連する情報を保持するフラッシュメモリ14に異常があっても、メモリ13を有効に活用する場合を説明した。本発明はこれに限定されるものではなく、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、メモリ(13、33)に関連する情報を保持するフラッシュメモリ(14、34)に異常があっても、メモリ(13、33)を有効に活用する場合であっても良い。
そこで、実施例2では、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、メモリ(13、33)に関連する情報を保持するフラッシュメモリ(14、34)に異常があっても、メモリ(13、33)を有効に活用する場合を説明する。まず、実施例2に係るRAIDシステムの全体構成について図4を参照しながら説明する。図4は、実施例2に係るRAIDシステムの全体構成の一例を示す図である。図4に示すように、実施例2に係るRAIDシステムでは、実施例1に係るRAIDシステム(図1)にサーバ4と制御装置30が追加されている。なお、図4において、図1と同じ部分には同じ符号を付し、詳しい説明を省略する。
サーバ1およびサーバ4は、ともにRAID装置2の上位装置であり、RAID装置2に対して入出力要求を指示する。サーバ1は、RAID装置2の制御装置10および制御装置30と接続パスで接続されている。サーバ2もサーバ1と同様にRAID装置2の制御装置10および制御装置30と接続パスで接続されている。
制御装置10および制御装置30は、二重化されており、それぞれサーバ1(およびサーバ4)から同一の入出力要求の指示を取得すると、メモリ13上のデータとメモリ33上のデータとが同一となるように同期を常にとって、同一内容のデータを記憶装置20に格納する。なお、制御装置10を「0系」とし、制御装置30を「1系」というものとする。また、以下、制御装置10の機能を説明するが、制御装置30の機能は、制御装置10と同様であるため、その説明を省略する。
サーバ接続インタフェース部11−1は、サーバ1とRAID装置2とがデータのやりとりを行うインタフェースであり、サーバ接続インタフェース部11−2は、サーバ2とRAID装置2とがデータのやりとりを行うインタフェースである。
制御部12は、サーバ(1、4)からの入出力要求に応じた処理中に、AC電源からメモリ13への給電が停止される要因となる異常を検知すると、検知された異常要因をメモリ13に書き込む。ここで、異常要因には、制御装置10と制御装置30とが同時に異常を引き起こすような要因と、制御装置10と制御装置30とが異なる時に異常を引き起こすような要因とがある。制御装置10と制御装置30とが同時に異常を引き起こすような要因には、例えば停電があり、制御装置10と制御装置30とが異なる時に異常を引き起こすような要因には、それぞれの制御装置(10、30)内で異常を引き起こすような要因であり、例えば停電以外の給電異常および制御装置(10、30)内に搭載される装置の故障等の異常を引き起こす要因があるが、これに限定されない。
制御部12は、AC電源からメモリ13への給電が一旦停止された後に復旧したとき、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定し、当該データがあると判定されるとき、当該データが最新のデータであるか否かを判定する。具体的には、制御部12は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する。このとき、制御部12は、フラッシュメモリ14が異常である旨を検知すると、メモリ13の任意のアドレスからデータを読み出す。そして、制御部12は、読み出されたデータの誤りが検出されたか否かを判定する。制御部12は、データに誤りが検出されないと判定されたとき、メモリ13から異常要因を読み出して、読み出された異常要因が他系(1系)と同時に異常を引き起こすような要因であるか否かを判定する。制御部12は、異常要因が自系(0系)と他系(1系)とが同時に異常を引き起こすような要因であると判定されるとき、両系の制御装置(10、30)が同時にシャットダウンされており、どちらのメモリ(13、33)にも同一且つ最新のデータが保持されていることがわかるため、メモリ13に保持されたデータを用いて入出力処理を継続する。一方、制御部12は、異常要因が自系(0系)と他系(1系)とが同時に異常を引き起こすような要因でないと判定されるとき、自系(0系)および他系(1系)の異常が検知された時期の先後を判別できずメモリ(13、33)に保持されたデータの新旧を判断できないため、当該データを破棄するためにメモリ13を初期化する。
なお、制御部12は、フラッシュメモリ14が異常でないとき、すなわち、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていると判定されるとき、データが最新でないことを示す情報がフラッシュメモリ14に保持されているか否かを判定する。ここで、データが最新でないことを示す情報とは、メモリ13上のデータが最新でないことを示す情報である。制御装置30よりも先行して制御装置10に異常が発生したとき、制御装置10は入出力処理を先行して終了するため、制御装置10のメモリ13上のデータは制御装置30のメモリ33上のデータよりも古くなる。すなわち、メモリ13上のデータは最新ではないことになる。そこで、制御装置30が、制御装置10のメモリ13上のデータが最新でないことを示す情報を制御装置10のフラッシュメモリ14に格納する。そして、制御部12は、データが最新でないことを示す情報がフラッシュメモリ14に保持されているとき、メモリ13を初期化し、データが最新でないことを示す情報がフラッシュメモリ14に保持されていないとき、メモリ13に保持されたデータを用いて入出力処理を継続する。
これにより、制御装置10は、メモリ13上のデータが最新でない旨の情報が保持されたフラッシュメモリに異常がある場合であっても、メモリ13に保持された異常要因によってメモリ上のデータが最新であるか否かを判断することができるため、メモリ13上のデータが最新であるときだけメモリ13に保持されたデータを用いて入出力処理を継続することができる。その結果、制御装置10は、両系のメモリ13、33上のデータが不整合となることを防止することができる。
次に、実施例2に係る制御部12の構成について図5を参照しながら説明する。図5は、実施例2に係る制御部12の構成を示す機能ブロック図である。図5に示すように、実施例2に係る制御部12では、実施例に係る制御部12(図2)に異常要因情報書込部510と異常要因判定部520とが追加されている。なお、図5において、図2と同じ部分には同じ符号を付し、詳しい説明を省略する。なお、制御部32の機能は、制御部12と同様であるため、その説明を省略する。
異常監視部121は、電源管理部16や制御装置10内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」を検知すると、「メモリ給電異常」であることをデータ有り情報書込部122および異常要因情報書込部510に通知する。例えば、異常監視部121は、「メモリ給電異常」が発生した異常の要因とともに「メモリ給電異常」である旨を示す情報を、電源管理部16や制御装置10内の個々の装置から取得すると、「メモリ給電異常」であることをデータ有り情報書込部122に通知し、異常の要因を異常要因情報書込部510に通知する。
異常要因情報書込部510は、異常監視部121から異常の要因が通知されると、検知された異常の要因を含む異常要因情報をメモリ13に書き込む。
データ有り判定部(不揮発メモリ)132は、フラッシュメモリを用いて、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定し、当該データがあると判定されるとき、当該データが最新のデータであるか否かを判定する。具体的には、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する。このとき、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常である旨を検知すると、フラッシュメモリ14が異常である旨をデータ有り判定部(揮発メモリ)133に通知する。
データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていると判定されたとき、メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されているか否かを判定する。データ有り判定部(不揮発メモリ)132は、メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されていないと判定されたとき、メモリ13上のデータが最新であることを処理継続部134に通知する。一方、データ有り判定部(不揮発メモリ)132は、メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されていると判定されたとき、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。なお、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていないと判定されたとき、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
データ有り判定部(揮発メモリ)133は、メモリ13を用いて、メモリ13に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部(揮発メモリ)133は、データ有り判定部(不揮発メモリ)132からフラッシュメモリ14が異常である旨が通知されると、データの誤りが検出されるか否かを判定する。データ有り判定部(揮発メモリ)133は、データの誤りが検出されないと判定されるとき、メモリ13に入出力処理の対象となっていたデータがあることを異常要因判定部520に通知する。一方、データ有り判定部(揮発メモリ)133は、データの誤りが検出されると判定されるとき、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
異常要因判定部520は、メモリ13を用いて、メモリ13上のデータが最新のデータであるか否かを判定する。具体的には、異常要因判定部520は、データ有り判定部(揮発メモリ)133からメモリ13に入出力処理の対象となっていたデータがあることが通知されると、メモリ13から異常要因情報を読み出して、読み出された異常要因情報に含まれた異常要因が他系(1系)と同時に異常を引き起こすような要因(例えば停電)であるか否かを判定する。そして、異常要因判定部520は、異常要因が他系(1系)と同時に異常を引き起こすような要因であると判定されるとき、メモリ13上のデータが最新のデータであるため、メモリ13上のデータが最新であることを処理継続部134に通知する。一方、異常要因判定部520は、異常要因が他系(1系)と同時に異常を引き起こすような要因でないと判定されるとき、メモリ13上のデータの新旧を判断できないため、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。
処理継続部134は、メモリ13上のデータが最新であることがデータ有り判定部(不揮発メモリ)132または異常要因判定部520から通知されると、メモリ13に保持されたデータを用いて、入出力処理を継続する。
メモリ初期化部135は、メモリ13に入出力処理の対象となっていたデータがないことまたはメモリ13上のデータが最新でないことが、データ有り判定部(不揮発メモリ)132、データ有り判定部(揮発メモリ)133または異常要因判定部520から通知されると、メモリ13を初期化する。
次に、実施例2に係る制御装置の処理を、図6を参照して説明する。図6は、実施例2に係る制御装置の処理を示すフローチャートである。なお、制御装置10が、入出力処理中に、AC電源からメモリ13への給電が停止されたものとして説明する。
まず、異常処理部120の異常監視部121は、電源管理部16や制御装置10内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する(S210)。このとき、異常監視部121は、「メモリ給電異常」が検知されないとき(S210No)、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
一方、異常監視部121は、「メモリ給電異常」が検知されるとき(S210Yes)、「メモリ給電異常」であることをデータ有り情報書込部122に通知し、異常の要因を異常要因情報書込部510に通知する。そして、「メモリ給電異常」であることが通知されたデータ有り情報書込部122は、メモリ13にデータがあることを示す情報をフラッシュメモリ14に書き込む(S220)。なお、制御装置10が制御装置30より先行して異常が発生したとき、制御装置10のフラッシュメモリ14には、制御装置30によって、メモリ13上のデータが最新でないことを示す情報が書き込まれる。
また、異常の要因が通知された異常要因情報書込部510は、通知された異常の要因に対応する異常要因コードをメモリ13に書き込む(S230)。
そして、バッテリ15は、メモリ13に給電を開始する(S240)。その後、制御装置10はシャットダウンして、AC電源からの給電が停止される。
その後、制御装置10がAC電源から再び給電されると、起動検知部131は、AC電源が投入されたことを検知して(S250)、AC電源が投入されたことをデータ有り判定部(不揮発メモリ)132に通知する。
AC電源が投入されたことが通知されたデータ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常であるか否かを判定する(S260)。具体的には、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14に対してメモリ13にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
フラッシュメモリ14が異常であると判定されると(S260Yes)、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常である旨をデータ有り判定部(揮発メモリ)133に通知する。
フラッシュメモリ14が異常である旨がデータ有り判定部(不揮発メモリ)132から通知されたデータ有り判定部(揮発メモリ)133は、メモリ13の任意のアドレスからデータを読み出して、読み出されたデータの誤りが検出されるか否かを判定する(S270)。
データの誤りが検出されないと判定されると(S270No)、メモリ13のデータに誤り検出符号が付加されていることがわかるため、データ有り判定部(揮発メモリ)133は、メモリ13に入出力処理の対象となっていたデータがあることを異常要因判定部520に通知する。
一方、データの誤りが検出されると判定されると(S270Yes)、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
メモリ13に入出力処理の対象となっていたデータがあることがデータ有り判定部(揮発メモリ)133から通知された異常要因判定部520は、メモリ13に保持された異常要因コードが停電(他系と同時に異常を引き起こすような要因)であるか否かを判定する(S280)。
異常要因コードが停電を示すコードであると判定されると(S280Yes)、異常要因判定部520は、停電が他系と同時に異常を引き起こすような要因であるため、メモリ13上のデータが最新であることを処理継続部134に通知する。
一方、異常要因コードが停電を示すコードでないと判定されると(S280No)、異常要因判定部520は、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。
また、フラッシュメモリ14が正常であると判定されると(S260No)、データ有り判定部(不揮発メモリ)132は、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されているか否かを判定する(S290)。
メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていると判定されると(S290Yes)、データ有り判定部(不揮発メモリ)132は、メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されているか否かを判定する(S300)。
一方、メモリ13にデータがあることを示す情報がフラッシュメモリ14に保持されていないと判定されると(S290No)、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されていると判定されると(S300Yes)、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。
一方、メモリ13上のデータが最新でないことを示す情報がフラッシュメモリ14に保持されていないと判定されると(S300No)、メモリ13上のデータが最新であることを処理継続部134に通知する。
そして、メモリ初期化部135は、データ有り判定部(不揮発メモリ)132からメモリ13に入出力処理の対象となっていたデータがないことまたはメモリ13上のデータが最新でないことが通知されたとき、または、データ有り判定部(揮発メモリ)133からメモリ13上のデータが最新でないことが通知されたとき、メモリ13を初期化する(S320)。
そして、処理継続部134は、データ有り判定部(不揮発メモリ)132からメモリ13上のデータが最新であることが通知されたとき、または、データ有り判定部(揮発メモリ)133からメモリ13上のデータが最新であることが通知されたとき、メモリ13に保持されたデータを用いて、入出力処理を継続する(S310)。
ここで、図7および図8を参照して、異常要因に対応した制御装置の復旧動作について説明する。図7では、異常要因が他系と同時に異常を引き起こすような要因の例である停電の場合について説明し、図8では、異常要因が他系と異なる時の異常を引き起こすような要因の例である停電以外の場合について説明する。
図7は、異常要因が停電の場合の制御装置の復旧動作を示す図である。図7に示すように、停電によってAC電源からの給電が停止された制御装置10のフラッシュメモリ14には、メモリ13上にデータがあることを示す情報が保持され、メモリ13には、停電を示す異常要因情報が保持されている。そして、AC電源からの給電が再投入された制御装置10は、フラッシュメモリ14に異常が発生したとき、フラッシュメモリ14に保持されたメモリ13に関連する情報を参照することができないため、メモリ13に保持された異常要因情報を参照する。すると、制御装置10は、異常要因情報が停電であるため、メモリ13上のデータが最新であることがわかり、メモリ13に保持されたデータを用いて制御装置10を復旧する。
この場合、制御装置10と同様にAC電源からの給電が停止された制御装置30は、AC電源からの給電が再投入された後の復旧時に新たに何らかの異常が発生しても、制御装置10のメモリ13上のデータが最新であるため、後にメモリ13上のデータを用いてメモリ33を正しく復旧することができる。
図8は、異常要因が停電以外の場合の制御装置の復旧動作を示す図である。なお、図8の例では、制御装置10が制御装置30よりも先行して異常が発生したものとする。図8に示すように、停電以外の異常要因によってAC電源からの給電が停止された制御装置10のフラッシュメモリ14には、メモリ13上にデータがあることを示す情報およびメモリ13上のデータが最新でないことを示す情報が保持されている。また、メモリ13には、停電以外の異常要因を示す異常要因情報が保持されている。そして、AC電源からの給電が再投入された制御装置10は、フラッシュメモリ14に異常が発生したとき、フラッシュメモリ14に保持されたメモリ13に関連する情報を参照することができないため、メモリ13に保持された異常要因情報を参照する。すると、制御装置10は、異常要因情報が停電以外の異常要因であり制御装置30と同時に引き起こされた異常でないため、メモリ13上のデータが最新でないおそれがあることとなる。したがって、制御装置10は、メモリ13に保持されたデータを破棄する。これにより、制御装置10は、最新でないおそれのあるデータを正しく破棄することができ、最新でないおそれのあるデータを用いて誤って復旧することから回避することができる。
この場合、制御装置10と同様にAC電源からの給電が停止された制御装置30は、AC電源からの給電が再投入された後の復旧時に新たに何らかの異常が発生しても、後にメモリ13上の最新でないおそれのあるデータを用いてメモリ33を誤って復旧することから回避することができる。
以上のように本実施例によれば、制御装置10は、サーバ(1、4)から指示された入出力処理中に、当該入出力処理に用いられるデータをAC電源から給電してメモリ13に格納している。また、そして、制御装置10は、AC電源からメモリ13への給電が停止された後再びAC電源からの給電が開始されたとき、メモリ13によって保持されたデータに誤り検出符号が付加されているか否かを判定する。そして、制御装置10は、メモリ13によって保持されたデータに誤り検出符号が付加されていると判定されたとき、メモリ13に書き込まれた異常要因情報が、他系の制御装置30と同時に異常を引き起こす要因であるか否かを判定する。そして、制御装置10は、他系の制御装置30と同時に異常を引き起こす要因であると判定されたとき、メモリ13に保持されたデータを用いて入出力処理を継続する。
このようにして、制御装置10は、万一フラッシュメモリ14に異常があっても、メモリ13に保持された異常要因情報を参照してメモリ13のデータが最新であるか否かを判定できるため、メモリ13のデータが最新であるときはAC電源からメモリ13への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
ところで、上記の実施例1では、シングル構成の制御装置10がAC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、メモリ13に関連する情報を保持するフラッシュメモリ14に異常があっても、メモリ13を有効に活用する場合を説明した。本発明はこれに限定されるものではなく、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、メモリ(13、33)に関連する情報を保持するフラッシュメモリ(14、34)に異常があっても、メモリ(13、33)を有効に活用する場合であっても良い。この場合、上記の実施例2では、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、フラッシュメモリ(14、34)に異常があっても、メモリ(13、33)に保持された異常要因情報を参照して、メモリ(13、33)上のデータが最新であるか否かを判定した。本発明はこれに限定されるものではなく、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、フラッシュメモリ(14、34)に異常があっても、他系の制御装置(30、10)によって指示されてメモリ(13、33)に格納した情報を参照して、メモリ(13、33)上のデータが最新であるか否かを判定しても良い。
そこで、実施例3では、二重化された両方の制御装置(10、30)が、AC電源からメモリ13への給電が停止された後に再びAC電源からの給電が開始されたとき、フラッシュメモリ(14、34)に異常があっても、他系の制御装置(30、10)によって指示されてメモリ(13、33)に格納した情報を参照して、メモリ(13、33)上のデータが最新であるか否かを判定する場合を説明する。なお、実施例3に係るRAIDシステムの全体構成は、実施例2に係るRAIDシステムの全体構成と同様であるため、その説明を省略する。
そこで、実施例3に係る制御部(12、32)の構成について図9を参照しながら説明する。図9は、実施例3に係る制御部12の構成を示す機能ブロック図である。図9に示すように、実施例3に係る制御部12では、実施例2に係る制御部12(図5)に異常通知部910とデータ非最新情報書込分920とが追加され、異常要因判定部520がデータ破棄判定部930に変更されている。また、実施例3に係る制御部32は、データ破棄指示部940を備える。なお、図9において、図5と同じ部分には同じ符号を付し、詳しい説明を省略する。
異常通知部910は、「メモリ給電異常」である旨を示す情報を異常監視部121から取得すると、制御装置10がAC電源からメモリ13への給電が停止されることを他系の制御装置30に知らせるために、制御装置30の制御部32に対して「メモリ給電異常」である旨の情報を通知する。なお、制御装置10は、制御装置30より後に異常が発生したときは、既に制御装置30と同期していないため、当該情報を制御装置30に対して通知しないものとしても良い。
データ非最新情報書込部920は、メモリ13上のデータが最新でない旨の情報が制御部32のデータ破棄指示部940から通知されると、メモリ13上のデータが最新でない旨のデータ非最新情報をメモリ13に書き込む。ここで、データ非最新情報とは、メモリ13上のデータが最新でないことを示す情報である。制御装置30よりも先行して制御装置10に異常が発生したとき、制御装置10は入出力処理を先行して終了するため、制御装置10のメモリ13上のデータは制御装置30のメモリ33上のデータよりも古くなる。すなわち、メモリ13上のデータは最新ではないことになる。
データ破棄判定部930は、メモリ13を用いて、自装置のメモリ13上のデータが最新のデータであるか否かを判定する。具体的には、データ破棄判定部930は、データ有り判定部(揮発メモリ)133からメモリ13に入出力処理の対象となっていたデータがあることが通知されると、メモリ13にデータ非最新情報があるか否かを判定する。そして、データ破棄判定部930は、メモリ13にデータ非最新情報があると判定されるとき、メモリ13上のデータが最新のデータでないため、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。一方、データ破棄判定部930は、メモリ13にデータ非最新情報がないと判定されるとき、メモリ13上のデータが最新のデータであるため、メモリ13上のデータが最新であることを処理継続部134に通知する。
データ破棄指示部940は、制御装置10の異常通知部910から「メモリ給電異常」である旨を示す情報が通知されると、制御装置10が「メモリ給電異常」によって自装置(制御装置30)より先行して入出力処理を停止することになり、制御装置10のメモリ13上のデータが自装置(制御装置30)のメモリ33上のデータより古いことになるため、制御装置10のメモリ13上のデータが最新でない旨の情報をデータ非最新情報書込部920に通知する。
次に、実施例3に係る制御装置の処理を、図10を参照して説明する。図10は、実施例3に係る制御装置の処理を示すフローチャートである。なお、制御装置10が、制御装置30より先行して、入出力処理中にAC電源からメモリ13への給電が停止されるものとして説明する。
まず、異常処理部120の異常監視部121は、電源管理部16や制御装置10+-内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する(S410)。このとき、異常監視部121は、「メモリ給電異常」が検知されないとき(S410No)、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
一方、異常監視部121は、「メモリ給電異常」が検知されるとき(S410Yes)、「メモリ給電異常」であることをデータ有り情報書込部122および異常通知部910に通知する。なお、図10の例では、制御装置10が、制御装置30より先行して、AC電源からメモリ13への給電が停止されているため、異常監視部121によって検知される「メモリ給電異常」は、例えば停電以外の給電異常および制御装置内に搭載される装置(CPU等)の故障等の異常を含んでいる。
「メモリ給電異常」であることが通知された異常通知部910は、自装置が「メモリ給電異常」である旨の情報を他系の制御装置30のデータ破棄指示部940に通知する(S420)。また、自装置が「メモリ給電異常」であることが通知されたデータ有り情報書込部122は、メモリ13にデータがあることを示す情報をフラッシュメモリ14に書き込む(S430)。なお、制御装置10は、制御装置30より先行して「メモリ給電異常」が発生したため、制御装置30によって、メモリ13上のデータが最新でないことを示す情報をフラッシュメモリ14に書き込まれる。
また、他系の制御装置30のデータ破棄指示部940からメモリ13上のデータが最新でない旨の情報が通知されたデータ非最新情報書込部920は、メモリ13上のデータが最新でない旨のデータ非最新情報をメモリ13に書き込む(S440)。
そして、バッテリ15は、メモリ13に給電を開始する(S450)。その後、制御装置10はシャットダウンして、AC電源からの給電が停止される。
引き続き、制御装置10がAC電源から再び給電されると、起動検知部131は、AC電源が投入されたことを検知して(S460)、AC電源が投入されたことをデータ有り判定部(不揮発メモリ)132に通知する。
AC電源が投入されたことが通知されたデータ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常であるか否かを判定する(S470)。具体的には、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14に対してメモリ13にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
フラッシュメモリ14が異常であると判定されると(S470Yes)、データ有り判定部(不揮発メモリ)132は、フラッシュメモリ14が異常である旨をデータ有り判定部(揮発メモリ)133に通知する。
フラッシュメモリ14が異常である旨がデータ有り判定部(不揮発メモリ)132から通知されたデータ有り判定部(揮発メモリ)133は、メモリ13の任意のアドレスからデータを読み出して、データの誤りが検出されるか否かを判定する(S480)。
データの誤りが検出されないと判定されると(S480No)、データ有り判定部(揮発メモリ)133は、メモリ13のデータに誤り検出符号が付加されていることがわかるため、メモリ13に入出力処理の対象となっていたデータがあることをデータ破棄判定部930に通知する。
一方、データの誤りが検出されると判定されると(S480Yes)、メモリ13に入出力処理の対象となっていたデータがないことをメモリ初期化部135に通知する。
メモリ13に入出力処理の対象となっていたデータがあることがデータ有り判定部(揮発メモリ)133から通知されたデータ破棄判定部930は、メモリ13にデータ非最新情報があるか否かを判定する(S490)。
メモリ13にデータ非最新情報がないと判定されると(S490No)、データ破棄判定部930は、メモリ13のデータが最新であるため、メモリ13上のデータが最新であることを処理継続部134に通知する。そして、処理継続部134は、メモリ13に保持されたデータを用いて、入出力処理を継続する(S520)。
一方、メモリ13にデータ非最新情報があると判定されると(S490Yes)、データ破棄判定部930は、メモリ13のデータが最新でないため、メモリ13上のデータが最新でないことをメモリ初期化部135に通知する。そして、メモリ初期化部134は、メモリ13を初期化する(S530)。
なお、フラッシュメモリ14が正常であると判定された場合(S470No)の処理は、実施例2に係る制御装置の処理(図6:S290〜S320)と同様であるため、説明を省略する(S500〜S530)。
ここで、図11を参照して、実施例3に係る制御装置の復旧動作の例について説明する。図11の例では、制御装置10および制御装置30に先後して「メモリ給電異常」が発生して、先行して「メモリ給電異常」が発生した制御装置10のフラッシュメモリ14に異常が発生した場合について説明する。なお、制御装置10が、制御装置30より先行して、「メモリ給電異常」が発生しているため、この「メモリ給電異常」は、例えば停電以外の給電異常および制御装置内に搭載される装置(CPU等)の故障等の異常を含んでいる。
図11に示すように、制御装置10に制御装置30より先行して「メモリ給電異常」が発生すると、「メモリ給電異常」が発生していない制御装置30は、制御装置10に「メモリ給電異常」が発生していることを検出して(ステップ(1))、制御装置10との同期を停止する(ステップ(2))。そして、制御装置30は、制御装置10にメモリ13上のデータを破棄させるために、メモリ13上のデータが最新でない旨の情報を通知する(ステップ(3))。メモリ13上のデータが最新でない旨の情報が通知された制御装置10は、メモリ10にデータ非最新情報を書き込む。なお、このとき、制御装置10は、フラッシュメモリ14にメモリ13上にデータが最新でない情報を、制御装置30によって書き込まれる。
その後、制御装置30に「メモリ給電異常」が発生して両方の制御装置(10、30)がシャットダウンすることになると、その後、AC電源が再投入される。すると、制御装置10は、フラッシュメモリ14が異常であるためメモリ13にデータがあることを示す情報およびメモリ13上のデータが最新でない情報が保持されたフラッシュメモリ14からこれらの情報を参照できず、メモリ13を参照してメモリ13上のデータが最新であるか否かを判定する。ここで、制御装置10は、制御装置30によって通知されたメモリ13上のデータが最新でない旨のデータ非最新情報がメモリ13に保持されているため、メモリ13上のデータが最新でないと判定して、メモリ13上のデータを破棄する。これにより、制御装置10は、メモリ13上の最新でないデータを正しく破棄することができ、メモリ13上の最新でないデータを用いて自装置を誤って復旧することから回避することができる。
一方、制御装置30は、フラッシュメモリ34に異常が発生していないときは、フラッシュメモリ34を参照して、メモリ33上のデータが最新でない旨の情報が保持されていないため、メモリ33上のデータを用いて自装置を復旧する。制御装置30が自装置の復旧時に、仮に新たに何らかの異常が発生しても、制御装置30は、後に制御装置10のメモリ13上の最新でないデータを用いて、メモリ33を誤って復旧することから回避することができる。
なお、後に「メモリ給電異常」が発生した制御装置30のフラッシュメモリ14に異常が発生した場合については、制御装置30は、制御装置10より後に「メモリ給電異常」が発生しているため、メモリ33にはデータ非最新情報が保持されておらず最新のデータが保持されていることがわかり、メモリ33上の最新のデータを用いて自装置を正しく復旧することができる。
以上のように本実施例によれば、制御装置10は、AC電源からメモリ13への給電が停止されることを検知したとき、AC電源からメモリ13への給電が停止されることを自装置と同期中の制御装置30に通知する。その後、制御装置10は、当該通知に対する応答として、メモリ13に保持されているデータが最新でない旨のデータ非最新情報を制御装置30から取得して、当該データ非最新情報をメモリ13に書き込む。そして、制御装置10は、メモリ13にデータ非最新情報が保持されているか否かを判定して、メモリ13にデータ非最新情報が保持されていると判定されたとき、メモリ13に保持されたデータを用いて入出力処理を継続する。
このようにして、制御装置10は、仮にフラッシュメモリ14に異常があっても、メモリ13に保持されたデータ非最新情報を参照してメモリ13上のデータが最新であるか否かを判定できるため、メモリ13上のデータが最新であるときは入出力処理を継続することができ、AC電源からメモリ13への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
なお、制御装置10および制御装置30にて行われる各処理機能は、その全部または任意の一部が、CPU(またはMPU(Micro Processing Unit)、MCU(Micro Controller Unit)等のマイクロ・コンピュータ)および当該CPU(またはMPU、MCU等のマイクロ・コンピュータ)にて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
(付記1)上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とする制御装置。
(付記2)前記判定手段は、
前記処理に用いられたデータが前記保持手段に保持されていることを示す情報を保持する不揮発性メモリが異常であるとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定することを特徴とする付記1に記載の制御装置。
(付記3)前記判定手段は、
前記保持手段によって保持されたデータにECCが付加されているか否かを判定することを特徴とする付記1または付記2に記載の制御装置。
(付記4)前記判定手段は、
誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分と、を前記保持手段から読み出す読出手段と、
前記読出手段によって読み出された情報データ部分について、誤り検出符号部分を用いて誤り検出する誤り検出手段と、を含み、
前記誤り検出手段によって誤りなしの結果が得られた場合に、誤り検出符号が付加されていると判定することを特徴とする付記1から付記3のいずれか1つに記載の制御装置。
(付記5)前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、前記処理中のデータが保持されていることを示す情報を前記保持手段に書き込むデータ有り情報書込手段と、
前記データ有り情報書込手段によって書き込まれた情報が、前記保持手段に保持されているか否かを判定するデータ有り情報判定手段と、をさらに備えることを特徴とする付記1から付記4のいずれか1つに記載の制御装置。
(付記6)前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、給電を停止させる要因を示す異常要因情報を前記保持手段に書き込む異常要因書込手段と、
前記異常要因書込手段によって書き込まれた異常原因情報が、自装置に同期する他の装置においても自装置と同時に異常を引き起こす要因を示すか否かを判定する異常要因判定手段をさらに備え、
前記継続手段は、
前記異常要因判定手段によって前記異常原因情報が、前記他の装置においても自装置と同時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを用いて前記処理を継続することを特徴とする付記1に記載の制御装置。
(付記7)前記異常要因判定手段によって前記異常原因情報が、前記他の装置において自装置とは異なる時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを破棄する破棄手段をさらに備えることを特徴とする付記6に記載の制御装置。
(付記8)前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、前記保持手段への給電が停止されることを自装置と同期中の他の装置に通知する通知手段と、
前記通知手段による通知に対する応答として、前記保持手段に保持されているデータが最新でない旨の情報を前記他の装置から取得する取得手段と、
前記取得手段によって取得された情報を前記保持手段に書き込む非最新情報書込手段と、をさらに備えることを特徴とする付記1に記載の制御装置。
(付記9)データを記憶する複数の記憶装置および前記複数の記憶装置を制御する制御装置を備えるストレージ装置であって、
前記制御装置は、
上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とするストレージ装置。
(付記10)上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持ステップと、
前記主電源から前記保持ステップへの給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持ステップによって保持されたデータに誤り検出符号が付加されているか否かを判定する判定ステップと、
前記判定ステップによって判定された結果、前記保持ステップによって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持ステップによって保持されたデータを用いて前記処理を継続する継続ステップと、
を含むことを特徴とする制御方法。
実施例1に係るRAIDシステムの全体構成の一例を示す図である。
実施例1に係る制御部の構成を示す機能ブロック図である。
実施例1に係る制御装置の処理を示すフローチャートである。
実施例2に係るRAIDシステムの全体構成の一例を示す図である。
実施例2に係る制御部の構成を示す機能ブロック図である。
実施例2に係る制御装置の処理を示すフローチャートである。
異常要因が停電の場合の制御装置の復旧動作を示す図である。
異常要因が停電以外の場合の制御装置の復旧動作を示す図である。
実施例3に係る制御部の構成を示す機能ブロック図である。
実施例3に係る制御装置の処理を示すフローチャートである。
実施例3に係る制御装置の復旧動作の例を示す図である。
従来の停電時におけるRAID装置のコントローラの構成の例を示す図である。
従来のRAID装置のコントローラの構成の例を示す図である。
同時に異常が発生した場合のRAID装置のコントローラの復旧動作を示す図である。
時間差で異常が発生した場合のRAID装置のコントローラの復旧動作を示す図である。
符号の説明
12 制御部
120 異常処理部
121 異常監視部
122 データ有り情報書込部
130 復旧処理部
131 起動検知部
132 データ有り判定部(不揮発メモリ)
133 データ有り判定部(揮発メモリ)
134 処理継続部
135 メモリ初期化部