ストレージ装置及びストレージ装置制御方法
【課題】高い信頼性を維持しつつ、書き損じを検出するための処理の負荷を軽減したストレージ装置を提供する。
【解決手段】世代コード記憶部122は、ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する。世代コード管理部13は、検出した連続データに対して新しい世代コードを割り当て、書込データに含まれる連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、世代コード記憶部122に記憶させる。データ書込部15は、新しい世代コードをブロックデータ及び連続データに付加し記憶装置19に書き込む。判定部17は、読み出されたブロックデータ又は連続データに付加されている世代コードと世代コード記憶部122に記憶されている読み出された世代コードとが一致するか否かを判定する。データ送信部18は、世代コードが一致する場合、読み出されたブロックデータ又は連続データを送信する。
【解決手段】世代コード記憶部122は、ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する。世代コード管理部13は、検出した連続データに対して新しい世代コードを割り当て、書込データに含まれる連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、世代コード記憶部122に記憶させる。データ書込部15は、新しい世代コードをブロックデータ及び連続データに付加し記憶装置19に書き込む。判定部17は、読み出されたブロックデータ又は連続データに付加されている世代コードと世代コード記憶部122に記憶されている読み出された世代コードとが一致するか否かを判定する。データ送信部18は、世代コードが一致する場合、読み出されたブロックデータ又は連続データを送信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置及びストレージ装置制御方法に関する。
【背景技術】
【0002】
近年、装置内に多くのHDD(Hard Disk Drive)を内蔵するストレージ装置は、高い信頼性が要求されている。そこで、この要求に応えるべく、ストレージ装置の多くは、コンピュータなどのホストから受信したデータにチェックコード(DIF:Data Integrity Field)を付加している。チェックコードを付加することにより、ストレージ装置は、HDDへのデータの書き込みなどのデータ移動時にデータの整合性をチェックでき、部品故障などによるデータの不整合を未然に防止することができる。このようにして、ストレージ装置は、HDDに書き込むデータのデータ保証を行っている。
【0003】
ストレージ装置において、HDDへのデータの書き損じが発生することがある。このHDDへの書き損じとは、例えば、HDDへのデータ書き込み時において発生する、HDD自身もエラーが検出できないデータの書き込みの失敗を指す。このHDDへの書き損じの特徴として、HDDによるエラー検出がなされないため、HDDは、エラー発生の通知を出力しない。また、HDD上に格納されているデータは更新されずに、以前の古いデータのままになってしまう。そして、データは更新されずに古いデータのままであるのに対して、チェックコードはそのまま維持されることになる。この場合、チェックコードによるデータ保証を用いた場合、チェックコードは正しいためエラーの検出をすることが困難となる。
【0004】
そこで、HDDへの書き損じなどに対処するため、次のような技術が提案されている。まず、1つの方法として、HDDへデータを書き込んだ後、再度同じ領域のデータをHDDから読み出し、書き込んだデータと読み出したデータとを比較することで書き損じを未然に防止する技術がある。この方式では、HDDへデータを書き込むたびに、データの読み出し及び比較が行われるので、I/O(Input/Output)性能が低下してしまう。
【0005】
また、他の方法として、HDDへのデータ書き込み時には、特別な処理は行わず、データ読み出し時に、RAIDの冗長データも同時に読み出し、RAIDの整合性をチェックすることで、書き損じなどを回避する従来技術がある。この従来技術では、例えば、ミラーリングされたデータ同士が比較されることになる。この方式では、書き損じが生じたことは検出できるが、どのHDDで書き損じが発生したのか特定できず、データの修復を行うことが困難である。
【0006】
そこで、データの書き込み動作毎に、インクリメントさせた書込情報をデータに付与するとともに付与した書込情報を記憶しておき、データを読み出す時に、記憶している書込情報とデータに付与されている書込情報が一致するかをチェックする従来技術がある。また、データの書き込み先の物理ディスク毎にデータにチェックコードを付加してデータを管理する従来技術がある。さらに、データに世代、時刻などの更新状態を表す更新状態値をディスクへのI/O単位であるブロック毎に付加して、読み出し時にその更新状態値を用いてブロック毎にチェックを行う従来技術がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特許第4454204号公報
【特許文献2】特開平10−171608号公報
【特許文献3】特開2006−252530号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、インクリメントさせた書込情報をデータに付与する技術の場合、全てのデータに書込情報を付与していき、また読み出しの際には1つずつデータをチェックするので、書き損じを検出するため処理の負荷が高くなってしまう。また、物理ディスク毎にデータにチェックコードを付加する技術の場合、書き損じを検出するための処理の負荷がさらに高くなってしまう。また、ブロック毎に更新状態値を付加する技術の場合、ブロック単位でのエラーチェックしかできないため、エラーの検出の確率が下がり信頼性が低下してしまう。
【0009】
開示の技術は、上記に鑑みてなされたものであって、高い信頼性を維持しつつ、書き損じを検出するための処理の負荷を軽減したストレージ装置及びストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
本願の開示するストレージ装置及びストレージ装置制御方法は、一つの態様において、データ受信部は、所定サイズのデータであるブロックデータを含む書込データを受信する。世代コード記憶部は、前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する。世代コード管理部は、前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる。データ書込部は、前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込む。データ読出部は、前記記憶装置から前記ブロックデータ又は連続データを読み出す。判定部は、前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する。送信部は、前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信する。
【発明の効果】
【0011】
本願の開示するストレージ装置及びストレージ装置制御方法の一つの態様によれば、高い信頼性を維持しつつ、書き損じを検出するための処理の負荷を軽減することができるという効果を奏する。
【図面の簡単な説明】
【0012】
【図1】図1は、実施例1に係るストレージ装置のブロック図である。
【図2】図2は、世代コントロールブロックを説明するための図である。
【図3−1】図3−1は、世代コントロールブロックへの連続世代コードの書き込みを説明するための概念図である。
【図3−2】図3−2は、連続世代コードを用いない場合の世代コントロールブロックへの世代コードの書き込みを説明するための概念図である。
【図4】図4は、連続世代コードが有効な世代コントロールブロックへの各ブロックデータ別の世代コードの書き込みを説明するための概念図である。
【図5】図5は、世代コードが付加された状態のブロックデータを表す図である。
【図6】図6は、データ書き込み時の処理を説明するための図である。
【図7】図7は、データ読み出し時の処理を説明するための図である。
【図8】図8は、実施例1に係るストレージ装置における書き込み処理のフローチャートである。
【図9】図9は、実施例1に係るストレージ装置における読み出し処理のフローチャートである。
【図10】図10は、実施例1に係るストレージ装置のハードウェア構成を表す構成図である。
【図11】図11は、実施例2に係るストレージ装置で用いられる世代コントロールブロックの一例を表す図である。
【図12】図12は、ハッシュテーブルの一例を表す図である。
【図13】図13は、実施例2に係るストレージ装置における世代コントロールブロックの記憶方法を説明するための図である。
【発明を実施するための形態】
【0013】
以下に、本願の開示するストレージ装置及びストレージ装置制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージ装置及びストレージ装置制御方法が限定されるものではない。
【実施例1】
【0014】
図1は、実施例1に係るストレージ装置のブロック図である。図1に示すように本実施例に係るストレージ装置1は、データ受信部10、チェックコード付加部11、主記憶部12、世代コード管理部13、世代コード退避部14、データ書込部15、データ読出部16、判定部17、データ送信部18及び記憶装置19を有している。また、ストレージ装置1は、ホスト2とネットワークなどを介して接続されている。そして、ストレージ装置1は、ホスト2との間でデータの送受信が可能である。
【0015】
記憶装置19は、複数のHDDを有している。そして、記憶装置19のHDDを用いて複数のRAID(Redundant Arrays of Inexpensive Disks)構成(アレイセット)が作成されている。そして、各RAID構成には識別子としてRAID番号が与えられている。さらに、各RAID構成は、それぞれのRAID構成におけるファイルの格納位置であるRAID LBA(Logical Block Address)を有している。RAID LBAは、ディスクへのI/O(Input/Output)単位であるブロック毎に割り当てられている。すなわち、RAID番号とRAID LBAが特定されれば、どのRAID構成のどこにあるデータかが決まり、記憶装置19の中からデータが一意的に決まることになる。以下では、1ブロックのサイズを有する個々のデータ、すなわちディスクへのI/O単位のデータを単に「ブロックデータ」と呼ぶことがある。
【0016】
主記憶部12は、SDRAMなどのメモリである。そして、主記憶部12は、データキャッシュ部121及び世代コード記憶部122を有している。世代コード記憶部122は、図2に示すような、世代コントロールブロック200を予め記憶しておく。主記憶部12は、世代コントロールブロック200に対応させてその世代コントロールブロック200が最後にアクセスされた日時も記憶している。図2は、世代コントロールブロックを説明するための図である。世代コントロールブロック200は、各ブロックデータの世代コードを管理するためのテーブルである。世代コード記憶部122は、予め決められた所定容量分の世代コントロールブロックを記憶している。ここで、図2を参照して、世代コントロールブロック200について詳細に説明する。
【0017】
世代コントロールブロック200は、位置情報領域201、連続管理領域202及び世代コードテーブル203を有している。位置情報領域201には、RAID番号及びStripe番号が記載されている。また、連続管理領域202には、世代コードテーブル203に記載された各ブロックデータの世代コードをまとめて1つとして扱うか否かを示す値である連続世代コードが有効か否かを示すフラグが記載されている。また、連続世代コードが有効の場合、連続管理領域202には、連続世代コードの情報が記載されている。連続世代コードについては後で詳細に説明する。世代コードテーブル203は、RAID LBAが連続する所定個のブロックデータの世代コードを記載する世代コード欄231を有している。ここで、本実施例では、世代コードテーブル203は、所定個の世代コード欄231としてRAID構成のストライプの数の世代コード欄231を有している。ここで、ストライプとは、RAID構成において一度に書き込むことができる個数のデータの組を表している。ストライプの数は、例えば、RAID構成において一度にデータを書き込む対象となる物理的なハードディスクの数である。
【0018】
そして、世代コントロールブロック200は、記憶装置19の各RAID構成のRAID LBAの全て網羅する数だけ予め作成されている。例えば、記憶装置19が1つのRAID構成を有しており、RAID LBAが1〜100まである場合で説明する。言い換えれば、この記憶装置19は、100個のブロックデータを記憶できるものである。そして、世代コードテーブル203に10個のブロックデータの世代コードが記載できるとすると、この場合、10個の世代コントロールブロック200が予め用意されている。これは、具体的には、RAID LBA1〜10に対応する世代コントロールブロック200、RAID LBA10〜20に対応する世代コントロールブロック200、・・・、RAID LBA90〜100に対応する世代コントロールブロック200となる。
【0019】
世代コード退避部14は、大容量の不揮発性メモリである。この不揮発性メモリとは、例えば、SSD(Solid State Drive)、Flashメモリ、HDDなどである。世代コード退避部14は、予め作成されている記憶装置19の各RAID構成のRAID LBAの全て網羅する数だけの世代コントロールブロック200(以下では、「記憶容量分の世代コントロールブロック」という。)を記憶している。ここで、本実施例では世代コード退避部14は、記憶容量分の世代コントロールブロック200を全て記憶しているとしたが、これは他の方法でも良い。例えば、世代コード記憶部122が保持している世代コントロールブロック200は、世代コード退避部14は保持しなくても良い。
【0020】
次に、データの書き込み側の構成及び動作について説明する。データ受信部10は、記憶装置19に書き込むデータである書込データをホスト2から受信する。この書込データは、1つ又は複数のブロックデータを含んでいる。このブロックデータが「所定サイズ」の一例にあたる。データ受信部10は、受信したデータをチェックコード付加部11へ出力する。
【0021】
チェックコード付加部11は、書込データに含まれる各ブロックデータに世代コード以外のチェックコードを付加する。このチェックコード付加部11により付加されるチェックコードは、例えば、CRC(Cyclic Redundancy Check),RAID番号及びFlag、RAID LBAなどである。そして、チェックコード付加部11は、世代コード以外のチェックコードを付加した各ブロックデータを主記憶部12のデータキャッシュ部121に格納する。
【0022】
世代コード管理部13は、データキャッシュ部121に蓄積されたブロックデータを記憶装置19に書き込む旨の通知を、書き込むブロックデータの識別情報とともに、後述するデータ書込部15から受信する。以下では、データキャッシュ部121に蓄積されたブロックデータを記憶装置19に書き込むことを「ライトバック」と呼ぶことがある。以下では、ライトバックが行われることがデータ書込部15から通知されたブロックデータについて説明する。世代コード管理部13は、ブロックデータのチェックコードを用いてブロックデータに含まれるブロックの世代コードが記載された世代コントロールブロックを世代コード記憶部122から検索する。ここで、ブロックデータに世代コードが未だ記載されていない場合には、世代コード管理部13は、世代コントロールブロックの検索を行わない。
【0023】
ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に格納されていない場合、世代コード管理部13は、そのブロックデータの世代コードが記載された世代コントロールブロックを世代コード退避部14から読み出す。そして、世代コード管理部13は、世代コード記憶部122に記憶されているアクセス日時を用いて、アクセスされた日時が最も古い世代コントロールブロックを特定する。そして、世代コード管理部13は、世代コード記憶部122に記憶されているアクセスされた日時が最も古い世代コントロールブロックを世代コード退避部14に移動する。この時、世代コード管理部13は、移動した世代コントロールブロックで世代コード退避部14に記憶されている対応する世代コードコントロールテーブルを更新する。そして、世代コード管理部13は、世代コード退避部14から読みだした世代コントロールブロックを世代コード記憶部122に格納する。
【0024】
世代コード管理部13は、ライトバックが通知されたコントロールブロックを含むデータキャッシュ部121に格納されている連続するブロックデータが、世代コントロールブロックに世代コードが記載された全てのブロックデータを含むか否かを判定する。この1つの世代コードテーブルに世代コードが記載された全てのブロックデータをまとめたものを「連続データ」という。すなわち、連続データは、ある世代コードテーブルの先頭のブロックからRAID LBAがストライプの数連続するブロックデータの集合である。
【0025】
図3−1は、世代コントロールブロックへの連続世代コードの書き込みを説明するための概念図である。図3−1では、世代コントロールブロックの連続管理領域202及び世代コードテーブル203のみを抜き出して記載している。世代コントロールブロック200aが連続世代コードを書き込む前の状態を表す。また、世代コントロールブロック200bが連続世代コードを書き込んだ後の状態を表す。世代コード管理部13は、連続データがある場合、その連続データに対応する世代コントロールブロックの連続管理領域202の連続世代コードが有効か否かを示すフラグ(以下では、「連続フラグ」と言う場合がある。)を確認する。連続世代コードが無効の場合、すなわち、図3−1の世代コントロールブロック200aの場合、世代コード管理部13は、その連続管理領域202の連続世代コードを有効にする。ここで、連続世代コードを有効にすると、世代コードテーブル203に含まれる個々のブロックの世代コード欄は無効になる。世代コードテーブル200bの世代コードテーブル203が点線で表されているのは無効であることを表している。そして、世代コード管理部13は、世代コントロールブロック200aの世代コードテーブル203に記載されている世代コードのうちの最大値を1つインクリメントしたものを連続世代コードとして連続管理領域に書き込む。これにより、世代コントロールブロック200bのように、連続管理領域202の連続世代コードが有効となり、連続世代コードが6となる。
【0026】
図3−2は、連続世代コードを用いない場合の世代コントロールブロックへの世代コードの書き込みを説明するための概念図である。ここで、図3−2を用いて、連続世代コードを使用しない場合の世代コードの更新を説明する。図3−2では、世代コードテーブル203のみ記載している。図3−2は、紙面に向かって上の状態の各世代コードが更新されて紙面に向かって下の状態になったことを表している。図3−2に示すように、各ブロックの世代コードを更新するには、各ブロックの世代コードをそれぞれ1つインクリメントして、それぞれの値を書き込んでいかなくてはならない。この点、連続世代コードを使用した場合には、連続フラグの確認と必要があれば連続フラグの変更を行い、連続世代コードの書き込みを行うだけなので、世代コードを書き込む負荷が連続世代コードを使用しない場合に比べて軽減できる。
【0027】
連続世代コードが有効の場合、世代コード管理部13は、その連続管理領域に記載された連続世代コードを1つインクリメントした値を書き込む。
【0028】
図4は、連続世代コードが有効な世代コントロールブロックへの各ブロックデータ別の世代コードの書き込みを説明するための概念図である。図4は、世代コントロールブロック200cの世代コード欄232の世代コードが更新する場合を表している。世代コード管理部13は、書込データの連続データ以外のブロックに対して、そのブロックの世代コードが記載されている世代コントロールブロックの連続管理領域の連続世代コードが有効か否かを示すフラグを確認する。連続世代コードが有効の場合、世代コントロールブロックは、図4の世代コントロールブロック200cのようになっている。そして、世代コントロールブロック200cの世代コード欄232を更新する場合、世代コード管理部13は、連続フラグを無効にして、連続世代コードを無効にする。これにより、世代コントロールブロック200dの世代コードテーブル203のように、各ブロックデータの世代コードを表す世代コード欄が有効になる。そして、世代コード管理部13は、世代コード欄232に記載されている値を1つインクリメントした値を、世代コード欄232に書き込む。このとき、世代コード管理部13は、世代コードテーブル203の世代コード欄232以外の世代コード欄それぞれに、連続世代コードとして与えられていた値を書き込む。
【0029】
連続世代コードが無効の場合、世代コード管理部13は、世代コードの更新対象であるブロックデータの世代コードが記載されている世代コード欄の値を1つインクリメントした値をその欄に書き込む。
【0030】
さらに、世代コード管理部13は、世代コントロールブロックで記載した各ブロックデータに対応する世代コードを、データキャッシュ部121に記載されている各ブロックデータのチェックコードに付加する。図5は、世代コードが付加された状態のブロックデータを表す図である。世代コード管理部13により世代コードが付加されたブロックデータは300、図5に示すように、実際のデータ301及びチェックコード302からなる。そして、チェックコード302は、CRC321、RAID番号322、Flag323、世代コード324及びRAID LBA325からなる。ここで、Flag323は、データの有効/無効や、パリティを示すものである。このように、本実施例に係るストレージ装置では、ホスト2から受信した書込データ300に含まれるブロックデータそれぞれに更新の状態を表す世代コード324が付加される。
【0031】
データ書込部15は、記憶装置19の動作状態及びデータキャッシュ部121へのブロックデータの蓄積状態から、ブロックデータのライトバックのタイミングを決定する。そして、データ書込部15は、ライトバックを行うブロックデータの識別情報を世代コード管理部13へ通知する。
【0032】
データ書込部15は、世代コードが付加されたブロックデータをデータキャッシュ部121から取得する。そして、データ書込部15は、ブロックデータのチェックコードに記載されている、RAID番号及びRAID LBAが示す記憶装置19のアドレスに書込データを書き込む。
【0033】
図6は、データ書き込み時の処理を説明するための図である。ここで、図6を参照して、本実施例に係るストレージ装置1のデータ書き込み時の処理の全体的な流れを説明する。
【0034】
まず、書込データに含まれるブロックデータが、主記憶部12のデータキャッシュ部121に格納される(ステップS101)。次に、世代コード管理部13は、ライトバックが通知されたブロックデータの世代コードを含む世代コントロールブロックが世代コード記憶部122にあるか否か判定する。そして、該当する世代コントロールブロックが世代コード記憶部122に無い場合、世代コード管理部13は、世代コード退避部14から該当する世代コントロールブロックを読み込む。そして、世代コード管理部13は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する(ステップS102)。それとともに、世代コード管理部13は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する(ステップS103)。そして、世代コード管理部13は、世代コード記憶部122に記憶されている世代コントロールブロックに記載されたライトバックの対象のブロックデータの世代コードを1つインクリメントし更新する。この更新には、連続世代コードを使用した場合の更新も含まれる。そして、世代コード管理部13は、データキャッシュ部121に格納されているブロックデータの世代コードを世代コントロールブロックに記載した新しい世代コードに更新する(ステップS104)。そして、新しい世代コードが付加されたブロックデータは、記憶装置19に格納される(ステップS105)。
【0035】
図2に戻って、本実施例に係るストレージ装置1におけるデータ読み出し側の構成及び動作について説明する。データ読出部16は、ホスト2からデータの読み出し要求を受ける。そして、データ読出部16は、指定されたデータを記憶装置19から読み出す。このデータは、1つ又は複数のブロックデータで構成されている。そして、データ読出部16は、読み出したデータを主記憶部12のデータキャッシュ部へ格納する。
【0036】
判定部17は、データ読出部16が記憶装置19から読み出しデータキャッシュ部121に格納したブロックデータを参照する。そして、判定部17は、受信したブロックデータの世代コードが記載された世代コントロールブロックを、世代コード記憶部122に格納されている世代コントロールブロックの中から検索する。このとき、判定部17は、受信したデータが格納されていたRAID番号及びストライプ(Stripe)番号と図2に記載した世代コントロールブロック200の位置情報領域201とを用いて検索を行う。ストライプ番号とは、あるRAIDにおいてストライプの数のデータを一組とした場合に、どの組であるかを識別するための識別子である。
【0037】
受信したデータに含まれるブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に無い場合、判定部17は、世代コード退避部14から当該ブロックデータの世代コードが記載された世代コントロールブロックを読み込む。そして、判定部17は、世代コード記憶部122に記憶されているアクセス日時を用いて、アクセスされた日時が最も古い世代コントロールブロックを特定する。そして、判定部17は、アクセスされた日時が最も古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する。この時、判定部17は、移動した世代コントロールブロックで世代コード退避部14に記憶されている対応する世代コードコントロールテーブルを更新する。そして、判定部17は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する。
【0038】
判定部17は、受信したデータに含まれる各ブロックデータの世代コードと、世代コード記憶部122に記憶されている世代コントロールブロックに記載された当該ブロックデータの世代コードとを比較する。
【0039】
判定部17は、受信したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致した場合、受信したデータの識別情報をデータ送信部18へ出力する。
【0040】
これに対して、受信したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致しない場合、判定部17は、そのブロックデータを格納していたHDDで書き損じが発生したと判定する。この場合、本実施例では、判定部17は、書き損じが発生したと判定したHDDを切り離す。その後、判定部17は、記憶装置19に対してRAIDの縮退処理の実行を命令する。
【0041】
ここで、本実施例では、機能構成として判定部17と世代コード管理部13とを分けたがこれらは1つにまとめても良い。また、本実施例では、判定部17が、世代コード退避部14から世代コード記憶部122へ世代コントロールブロックを移動する処理を行っているが、この処理を判定部17が行わずに、世代コード管理部13が代わりに行っても良い。その場合、判定部17は、受信したデータに含まれるブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に無いと判定すると、世代コード管理部13にその旨の通知を行う。そして、世代コード管理部13は、判定部17からの通知を受けて、世代コード退避部14から世代コード記憶部122へ世代コントロールブロックを移動する処理を行うことになる。
【0042】
データ送信部18は、データの識別情報の入力を判定部17から受ける。そして、データ送信部18は、受信した識別情報を有するデータをデータキャッシュ部121から読み出す。そして、データ送信部18は、読み出したデータをホスト2へ送信する。
【0043】
図7は、データ読み出し時の処理を説明するための図である。ここで、図7を参照して、本実施例に係るストレージ装置のデータ読み出し時の処理の全体的な流れを説明する。
【0044】
まず、データ読出部16により記憶装置19から読み出されたデータが、主記憶部12のデータキャッシュ部121に格納される(ステップS201)。次に、判定部17が、読み出されたデータに含まれる各ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否か判定する。そして、該当する世代コントロールブロックが世代コード記憶部122に無い場合、判定部17は、世代コード退避部14から該当する世代コントロールブロックを読み込む。そして、判定部17は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する(ステップS202)。それとともに、判定部17は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する(ステップS203)。そして、判定部17は、読み出されたデータに含まれる各ブロックデータの世代コードと、世代コード記憶部122に記憶されている世代コントロールブロックに記載された当該ブロックデータの世代コードとを比較する(ステップS204)。そして、判定部17により世代コードが同じだと判定された場合、データ送信部18は、データキャッシュ部121に格納されているデータをホスト2へ送信する(ステップS205)。これに対して、判定部17により世代コードが異なると判定された場合、判定部17は書き損じが発生したと判定する。そして、判定部17は、書き損じが発生したHDDを切り離す。そして、判定部17は、記憶装置19に対してRAIDの縮退処理の実行を命令する。
【0045】
次に、図8を参照して、本実施例に係るストレージ装置における書き込み処理の流れを説明する。図8は、実施例1に係るストレージ装置における書き込み処理のフローチャートである。
【0046】
データ受信部10は、ホスト2から書き込みデータを受信する(ステップS301)。そして、チェックコード付加部11は、書込データに含まれる各ブロックデータに世代コード以外のチェックコードを付加してデータキャッシュ部121へ格納する。そして、世代コード管理部13は、記憶装置19へのライトバックを開始する旨の通知をデータ書込部15から受信するまで待機している。
【0047】
世代コード管理部13は、ライドバックするブロックデータに既に世代コードが付加されているか否かを判定する(ステップS302)。世代コードが付加されている場合(ステップS302肯定)、世代コード管理部13は、当該ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否かを判定する(ステップS303)。世代コード記憶部122に該当する世代コントロールブロックがない場合(ステップS303否定)、世代コード管理部13は、該当する世代コントロールブロックを世代コード退避部14から世代コード記憶部122に移動させる(ステップS304)。この時、世代コード管理部13は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14に移動する。
【0048】
そして、世代コード記憶部122に該当する世代コントロールブロックがある場合(ステップS303肯定)、世代コード管理部13は、世代コード記憶部122から当該ブロックデータの世代コードを読み込む(ステップS305)。また、世代コントロールブロックを世代コード退避部14から世代コード記憶部122に移動させた後、世代コード管理部13は、世代コード記憶部122から当該ブロックデータの世代コードを読み込む(ステップS305)。
【0049】
また、ライトバックするブロックデータに未だ世代コードが付加されていない場合(ステップS302否定)、ステップS306へ進む。
【0050】
世代コード管理部13は、書込データに含まれるブロックデータで構成された連続データにライトバックするブロックデータが含まれるか否かを判定する(ステップS306)。
【0051】
ライトバックするブロックデータが連続データに含まれる場合(ステップS306肯定)、世代コード管理部13は、当該ブロックデータの世代コードが記載された世代コントロールブロックの連続フラグを参照する。そして、世代コード管理部13は、連続世代コードが有効になっているか否かを判定する(ステップS307)。連続世代コードが無効の場合(ステップS307否定)、世代コード管理部13は、該当する世代コントロールブロックの連続フラグを変更し、連続世代コードを有効にする(ステップS308)。これに対して、連続世代コードが有効の場合(ステップS307肯定)、ステップS309に進む。
【0052】
世代コード管理部13は、該当する世代コントロールブロックの連続世代コードを1つインクリメントする(ステップS309)。
【0053】
これに対して、ライトバックするブロックデータが連続データに含まれない場合(ステップS306否定)、世代コード管理部13は、当該ブロックデータの世代コードを含む世代コントロールブロックの連続フラグを参照する。そして、世代コード管理部13は、連続世代コードが有効になっているか否かを判定する(ステップS310)。連続世代コードが有効の場合(ステップS310肯定)、世代コード管理部13は、該当する世代コントロールブロックの連続フラグを変更し、連続世代コードを無効にして世代コードの管理を分離する(ステップS311)。これに対して、連続世代コードが無効の場合(ステップS310否定)、ステップS312に進む。
【0054】
世代コード管理部13は、該当する世代コードテーブルの連続世代コードにおける書込データの各ブロックの世代コードを1つインクリメントする(ステップS312)。
【0055】
そして、世代コード管理部13は、ライトバックが行われる各ブロックデータに世代コードを書き込む(ステップS313)。
【0056】
データ書込部15は、世代コードが付加されたブロックデータを記憶装置19に書き込む(ステップS314)。
【0057】
次に、図9を参照して、本実施例に係るストレージ装置における読み出し処理の流れを説明する。図9は、実施例1に係るストレージ装置における読み出し処理のフローチャートである。
【0058】
データ読出部16は、ホスト2からの要求を受けて、指定されたデータを記憶装置19のHDDから読み出す(ステップS401)。そして、データ読出部16は、読み出したデータをデータキャッシュ部121に格納する。
【0059】
判定部17は、データキャッシュ部121に書き込まれたデータに含まれる各ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否かを判定する(ステップS402)。該当する世代コントロールブロックが有る場合(ステップS402肯定)、ステップS404へ進む。これに対して、該当する世代コントロールブロックが無い場合(ステップS402否定)、判定部17は、該当する世代コントロールブロックを世代コード退避部14から世代コード記憶部122へ移動する(ステップS403)。この時、判定部17は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14に移動する。
【0060】
判定部17は、読み出したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致するか否かを判定する(ステップS404)。読み出したデータに含まれるブロックデータの世代コードが一致した場合(ステップS404肯定)、データ送信部18は、データをホスト2に送信する(ステップS405)。
【0061】
これに対して、読み出したデータに含まれるブロックデータに世代コードが一致しないものがある場合(ステップS404否定)、判定部17は、当該ブロックを含むHDDを切り離す(ステップS406)。その後、ストレージ装置1は、HDDのRAID縮退処理を実行する。
【0062】
図10は、実施例1に係るストレージ装置のハードウェア構成を表す構成図である。本実施例に係るストレージ装置1は、図10に示すように、CPU101、メモリ102、バックアップデバイス103、I/Oコントローラ104及びI/Oコントローラ105を有しており、さらに、HDD3を複数有している。
【0063】
このCPU101が、チェックコード付加部11、世代コード管理部13及び判定部17の機能を有する。また、CPU101は、上述したストレージ装置1で行われる処理の制御を統括する。また、メモリ102が、主記憶部12の機能を有する。また、バックアップデバイス103が、世代コード退避部14の機能を有する。また、I/Oコントローラ104がデータ受信部10及びデータ送信部18の機能を有する。また、I/Oコントローラ105が、データ書込部15及びデータ読出部16の機能を有する。そして、HDD3をまとめたものが、記憶装置19の機能を有する。
【0064】
以上に説明したように、本実施例に係るストレージ装置は、HDDへの書き込み時に各ブロックに更新状態を表す世代コードを付加し、読み出し時にその世代コードをチェックすることで、データの書き損じを検出することができる。特に、本実施例に係るストレージ装置は、ブロックがRAIDを構成するストライプ分連続している場合、ブロックを一つにまとめて一つの世代コードを付加し、ストライプ分連続していない場合、ブロック毎に世代コードを付加する。これにより、世代コードの付加及び付加された世代コードを用いたデータのチェックの処理の負荷を軽減することができる。したがって、高い信頼性を維持しつつ、エラーチェックのための処理の負荷を軽減することができる。
【0065】
ここで、本実施例では、ハードディスクへの書き込みや読み出しを考慮し、連続データとして取り扱う個数である「所定個」をストライプの数として、RAIDを構成するストライプ分データが連続した場合に連続データとして取り扱うこととした。しかし、この連続データとして取り扱う個数は他の値を用いても良い。例えば、2ストライプ分のブロックデータであってもよいし、1000個のブロックデータなどとしてもよい。
【実施例2】
【0066】
次に、実施例2に係るストレージ装置について説明する。本実施例に係るストレージ装置は、データの読み出しを効率化するためにハッシュテーブル及びLRUリンクを用いたことが実施例1と異なるものである。本実施例に係るストレージ装置のブロック図も図1のブロック図と同様である。ここで、実施例1と同様の符号を有する各部は特に説明の無い限り本実施例においても同様の機能を有するものとする。
【0067】
図11は、実施例2に係るストレージ装置で用いられる世代コントロールブロックの一例を表す図である。本実施例の世代コントロールブロック200は、図2で表される実施例1の世代コントロールブロックにハッシュ情報領域204及びLRUリンク接続情報領域205をくわえたものである。ハッシュ情報領域204には、ハッシュリンク接続情報が記載されている。ここで、ハッシュリンク接続情報とは、世代コントロールブロック200がリンクされているハッシュテーブル上のハッシュ値を表す情報である。このハッシュ値は、RAID番号、RAID LBA,BlokCountをキーにして生成される。「BlockCount」は、ブロックデータを構成するセクタ数を表す値である。ここでは、「BlockCount」は、1つのRAID LBAがふられた領域の記憶容量を示すものである。
【0068】
図12は、ハッシュテーブルの一例を表す図である。世代コード管理部13は、図12に示すようなハッシュテーブルを記憶している。図12に示すように、本実施例に係るハッシュテーブル400は、各ハッシュ値に対して複数の世代コントロールブロックがぶら下がるリンク構造を有している。ここで、世代コントロールブロックの後ろに付加した「#n」は各世代コントロールブロックの識別子とする。例えば、ハッシュテーブル400の欄401に記載されているハッシュ値を例に説明する。欄401に記載されたハッシュ値に対しては、世代コードブロック#3、世代コントロールブロック#6、世代コントロールブロック#4の順にリンクされている。
【0069】
そして、世代コード管理部13は、データ受信部10が割り当てたRAID番号、RAID LBA,BlokCountをキーにハッシュ値を算出する。そして、世代コード管理部13は、算出したハッシュ値を基にハッシュテーブルを参照し、アクセスしたい世代コントロールブロックが既に世代コード記憶部122上に展開されているか否かを判定する。例えば、世代コード管理部13が、世代コントロールブロック#6に世代コードが記載されたブロックを基に検索する場合で説明する。世代コード管理部13は、ブロックに割り当てられたRAID番号、RAID LBA及びBlokCountからハッシュ値を算出する。ここでは、世代コード管理部13は、ハッシュテーブル400の欄401のハッシュ値を得る。そして、世代コード管理部13は、欄401のハッシュ値をハッシュテーブル上で検索する。そして、世代コード管理部13は、欄401のハッシュ値にリンクされている世代コントロールブロックを前から順に検索する。まず、世代コード管理部13は、世代コントロールブロック#3に該当するブロックデータの世代コードがあるか否か検索する。ここでは、世代コントロールブロック#3には、該当するブロックデータの世代コードはない。そこで、次に、世代コード管理部13は、世代コントロールブロック#6を検索する。ここで、世代コード管理部13は、世代コントロールブロック#6に該当するブロックデータの世代コードが記載されていることを検出する。そして、世代コード管理部13は、世代コントロールブロックが世代コード記憶部122に展開されているか否かを判定する。
【0070】
このようにハッシュテーブルを使うことで、ハッシュを用いずに全ての世代コントロールブロックを1つずつ調べてアクセスしたい世代コントロールブロックを検索する場合に比べて、対象とする世代コントロールブロックに迅速にアクセスすることができる。
【0071】
また、図13は、実施例2に係るストレージ装置における世代コントロールブロックの記憶方法を説明するための図である。本実施例に係るストレージ装置では、世代コード記憶部122は、図13のように、LRU(Least Recently Used)方式を用いて、アクセスされた日時の古い順に世代コントロールブロックを記憶している。
【0072】
具体的には、図11で示すように、世代コントロールブロック200のLRUリンク接続情報領域205に、LRUリンク接続情報が記載されている。このLRU接続情報は、世代コード記憶部122に記憶された日時の古いそれぞれの世代コントロールブロックの順番を示す情報である。図13の世代コード記憶部122の状態では、世代コントロールブロック#1が一番古く、世代コントロールブロック#3、世代コントロールブロック#4と順に新しくなり、世代コントロールブロック#2が最も新しくアクセスされたことを表している。
【0073】
世代コード管理部13は、世代コード記憶部122の中から特定の世代コントロールブロックを検索する場合、LRU接続情報を基にアクセスの新しいものから順に検索を行う。例えば、世代コントロールブロック#4を検索する場合、世代コード管理部13は、まず、世代コントロールブロック#2を確認し、次に世代コントロールブロック#4を確認することで検索を終えることができる。
【0074】
そして、世代コード管理部13は、世代コード記憶部122に特定の世代コントロールブロックが無い場合、世代コード退避部14から該当する世代コントロールブロックを読み出し、世代コード記憶部122に記憶させる。この時、世代コード管理部13は、LRUリンク接続情報から最も古くアクセスがあった世代コントロールブロックを取り出し、バックアップデバイスに入れる。そして、世代コード管理部13は、特定の世代コントロールブロックを世代コード退避部14から取得し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。ここで、一例として、図13の主記憶部12の状態で、世代コード管理部13が世代コントロールブロック#5を主記憶部12に移す場合を説明する。世代コード管理部13は、LRU接続情報を用いて、一番アクセスの古い世代コントロールブロック#1を主記憶部12から取り出し、世代コード退避部14へ書き込む。そして、世代コード管理部13は、世代コード退避部14から世代コントロールブロック#5を読み出し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。図13で表されるイメージとしては、並んでいるリンクの一番後ろに世代コントロールブロック#5が加えられることになる。また、リンク順の途中にある世代コントロールブロックを用いる場合、世代コード管理部13は、該当する世代コントロールブロックを抜き出し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。
【0075】
このように、LRU方式を用いて世代コントロールブロックを記憶することで、アクセス頻度の高い世代コントロールブロックほど早く見つけることができる。このため、何度も行われる書き込み及び読み込み処理をまとめてみた場合、全体的な処理速度を向上させることができる。
【0076】
また、判定部17は、図12に示すようなハッシュテーブルを記憶している。判定部17は、ブロックに割り当てられたRAID番号、RAID LBA及びBlokCountをキーにハッシュ値を算出する。そして、判定部17は、算出したハッシュ値を基にハッシュテーブルを参照し、アクセスしたい世代コントロールブロックが既に世代コード記憶部122上に展開されているか否かを判定する。
【0077】
また、判定部17は、世代コード記憶部122の中から特定の世代コントロールブロックを検索する場合、LRU接続情報を基にアクセスの新しいものから順に検索を行う。
【0078】
以上に説明したように、本実施例に係るストレージ装置では、ハッシュテーブル及びLRU方式を用いて、世代コントロールブロックの検索を行う。これにより、世代コントロールブロックの検索効率を向上させることができ、ストレージ装置における書き込み及び読み込み処理の速度が向上する。
【0079】
さらに、以上で説明した各実施例の変形例として、例えば次のような変形例がある。
【0080】
まず、ストレージ装置1の電源をオフにする場合、世代コード管理部13は、世代コード記憶部122に格納されている世代コントロールブロックを、世代コード退避部14に移動させる。この場合、世代コード退避部14に記憶されている世代コントロールブロックは更新される。そして、世代コードブロックの移動が全て完了した後に、ストレージ装置1の電源がオフになる。
【0081】
このようにすることで、電源オフのときにメモリ上にあった世代コントロールブロックの情報を維持することができる。これにより、電源オフの後再起動した場合でも、確実に書き損じなどのエラーをチェックすることができる。
【0082】
また、ストレージ装置1に停電時用のバッテリを配置する。そして、停電が発生した場合、バッテリからCPU101、メモリ102、バックアップデバイス103、I/Oコントローラ104及びI/Oコントローラ105を有するコントローラボードへ電源を供給する。そして、バッテリ駆動期間中に、世代コード記憶部122に格納されている世代コントロールブロックを、世代コード退避部14に移動させる。
【0083】
このようにすることで、停電時にもメモリ上にあった世代コントロールブロックの情報を維持することができる。これにより、停電が発生した場合でも、復旧後に確実に書き損じなどのエラーをチェックすることができる。
【0084】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0085】
(付記1)所定サイズのデータであるブロックデータを含む書込データを受信するデータ受信部と、
前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する世代コード記憶部と、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる世代コード管理部と、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込むデータ書込部と、
前記記憶装置から前記ブロックデータ又は連続データを読み出すデータ読出部と、
前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する判定部と、
前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信するデータ送信部と
を備えたことを特徴とするストレージ装置。
【0086】
(付記2)前記世代コード管理部は、前記連続データに対して新しい世代コードを割り当てた場合、該連続データを構成するブロックデータの識別情報に対応させて新しい世代コードを前記世代コード記憶部に記憶させ、前記ブロックデータそれぞれに新しい世代コードを割り当てた場合、各前記ブロックデータの識別情報それぞれに対応させて新しい世代コードを前記世代コード記憶部に記憶させることを特徴とする付記1に記載のストレージ装置。
【0087】
(付記3)前記記憶装置は、複数のハードディスクから成り、且つ該ハードディスクを用いて生成されたRAID構成を有しており、
前記連続データは、前記RAID構成におけるストライブの数の連続するブロックデータからなることを特徴とする付記1又は付記2に記載のストレージ装置。
【0088】
(付記4)前記世代コード記憶部は、前記連続データの世代コードが各ブロックデータの識別情報に対応するよう記載されたテーブルである世代コントロールブロックを用いて前記世代コードを記憶することを特徴とする付記1〜付記3のいずれか一つに記載のストレージ装置。
【0089】
(付記5)前記世代コード記憶部より容量が大きい記憶領域を有し、少なくとも前記世代コード記憶部が記憶する世代コードに対応するブロックデータ以外の前記記憶装置に記憶されているブロックデータの各世代コードが記載された前記世代コントロールブロックを記憶する世代コード退避部をさらに備え、
前記世代コード管理部は、前記書込データに含まれる前記ブロックデータの世代コードの情報が記載された世代コントロールブロックが前記世代コード退避部にある場合、前記世代コード記憶部に記憶されている最もアクセス日時の古い世代コントロールブロックと前記書込データに含まれるブロックデータの世代コードの情報を含む世代コントロールブロックとを入れ替えることを特徴とする付記4に記載のストレージ装置。
【0090】
(付記6)前記世代コード管理部及び前記判定部は、前記世代コントロールブロックの格納先を示すハッシュテーブルを有しており、
前記世代コード管理部及び前記判定部は、前記ハッシュテーブルを用いて前記世代コントロールブロックを検索する
ことを特徴とする付記4又は付記5に記載のストレージ装置。
【0091】
(付記7)所定サイズのデータであるブロックデータを含む書込データを受信し、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた前記世代コードを各前記ブロックデータ又は前記連続データの識別情報と対応させてメモリに記憶させ、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加しハードディスクに書き込み、
前記ハードディスクから前記ブロックデータ又は連続データを読み出し、
読み出した前記ブロックデータ又は連続データに付加されている世代コードと前記メモリに記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定し、
前記世代コードが一致すると判定した場合、前記読み出したブロックデータ又は連続データを送信する
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【0092】
1 ストレージ装置
2 ホスト
3 ハードディスク
10 データ受信部
11 チェックコード付加部
12 主記憶部
13 世代コード管理部
14 世代コード退避部
15 データ書込部
16 データ読出部
17 判定部
18 データ送信部
19 記憶装置
【技術分野】
【0001】
本発明は、ストレージ装置及びストレージ装置制御方法に関する。
【背景技術】
【0002】
近年、装置内に多くのHDD(Hard Disk Drive)を内蔵するストレージ装置は、高い信頼性が要求されている。そこで、この要求に応えるべく、ストレージ装置の多くは、コンピュータなどのホストから受信したデータにチェックコード(DIF:Data Integrity Field)を付加している。チェックコードを付加することにより、ストレージ装置は、HDDへのデータの書き込みなどのデータ移動時にデータの整合性をチェックでき、部品故障などによるデータの不整合を未然に防止することができる。このようにして、ストレージ装置は、HDDに書き込むデータのデータ保証を行っている。
【0003】
ストレージ装置において、HDDへのデータの書き損じが発生することがある。このHDDへの書き損じとは、例えば、HDDへのデータ書き込み時において発生する、HDD自身もエラーが検出できないデータの書き込みの失敗を指す。このHDDへの書き損じの特徴として、HDDによるエラー検出がなされないため、HDDは、エラー発生の通知を出力しない。また、HDD上に格納されているデータは更新されずに、以前の古いデータのままになってしまう。そして、データは更新されずに古いデータのままであるのに対して、チェックコードはそのまま維持されることになる。この場合、チェックコードによるデータ保証を用いた場合、チェックコードは正しいためエラーの検出をすることが困難となる。
【0004】
そこで、HDDへの書き損じなどに対処するため、次のような技術が提案されている。まず、1つの方法として、HDDへデータを書き込んだ後、再度同じ領域のデータをHDDから読み出し、書き込んだデータと読み出したデータとを比較することで書き損じを未然に防止する技術がある。この方式では、HDDへデータを書き込むたびに、データの読み出し及び比較が行われるので、I/O(Input/Output)性能が低下してしまう。
【0005】
また、他の方法として、HDDへのデータ書き込み時には、特別な処理は行わず、データ読み出し時に、RAIDの冗長データも同時に読み出し、RAIDの整合性をチェックすることで、書き損じなどを回避する従来技術がある。この従来技術では、例えば、ミラーリングされたデータ同士が比較されることになる。この方式では、書き損じが生じたことは検出できるが、どのHDDで書き損じが発生したのか特定できず、データの修復を行うことが困難である。
【0006】
そこで、データの書き込み動作毎に、インクリメントさせた書込情報をデータに付与するとともに付与した書込情報を記憶しておき、データを読み出す時に、記憶している書込情報とデータに付与されている書込情報が一致するかをチェックする従来技術がある。また、データの書き込み先の物理ディスク毎にデータにチェックコードを付加してデータを管理する従来技術がある。さらに、データに世代、時刻などの更新状態を表す更新状態値をディスクへのI/O単位であるブロック毎に付加して、読み出し時にその更新状態値を用いてブロック毎にチェックを行う従来技術がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特許第4454204号公報
【特許文献2】特開平10−171608号公報
【特許文献3】特開2006−252530号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、インクリメントさせた書込情報をデータに付与する技術の場合、全てのデータに書込情報を付与していき、また読み出しの際には1つずつデータをチェックするので、書き損じを検出するため処理の負荷が高くなってしまう。また、物理ディスク毎にデータにチェックコードを付加する技術の場合、書き損じを検出するための処理の負荷がさらに高くなってしまう。また、ブロック毎に更新状態値を付加する技術の場合、ブロック単位でのエラーチェックしかできないため、エラーの検出の確率が下がり信頼性が低下してしまう。
【0009】
開示の技術は、上記に鑑みてなされたものであって、高い信頼性を維持しつつ、書き損じを検出するための処理の負荷を軽減したストレージ装置及びストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
本願の開示するストレージ装置及びストレージ装置制御方法は、一つの態様において、データ受信部は、所定サイズのデータであるブロックデータを含む書込データを受信する。世代コード記憶部は、前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する。世代コード管理部は、前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる。データ書込部は、前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込む。データ読出部は、前記記憶装置から前記ブロックデータ又は連続データを読み出す。判定部は、前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する。送信部は、前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信する。
【発明の効果】
【0011】
本願の開示するストレージ装置及びストレージ装置制御方法の一つの態様によれば、高い信頼性を維持しつつ、書き損じを検出するための処理の負荷を軽減することができるという効果を奏する。
【図面の簡単な説明】
【0012】
【図1】図1は、実施例1に係るストレージ装置のブロック図である。
【図2】図2は、世代コントロールブロックを説明するための図である。
【図3−1】図3−1は、世代コントロールブロックへの連続世代コードの書き込みを説明するための概念図である。
【図3−2】図3−2は、連続世代コードを用いない場合の世代コントロールブロックへの世代コードの書き込みを説明するための概念図である。
【図4】図4は、連続世代コードが有効な世代コントロールブロックへの各ブロックデータ別の世代コードの書き込みを説明するための概念図である。
【図5】図5は、世代コードが付加された状態のブロックデータを表す図である。
【図6】図6は、データ書き込み時の処理を説明するための図である。
【図7】図7は、データ読み出し時の処理を説明するための図である。
【図8】図8は、実施例1に係るストレージ装置における書き込み処理のフローチャートである。
【図9】図9は、実施例1に係るストレージ装置における読み出し処理のフローチャートである。
【図10】図10は、実施例1に係るストレージ装置のハードウェア構成を表す構成図である。
【図11】図11は、実施例2に係るストレージ装置で用いられる世代コントロールブロックの一例を表す図である。
【図12】図12は、ハッシュテーブルの一例を表す図である。
【図13】図13は、実施例2に係るストレージ装置における世代コントロールブロックの記憶方法を説明するための図である。
【発明を実施するための形態】
【0013】
以下に、本願の開示するストレージ装置及びストレージ装置制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージ装置及びストレージ装置制御方法が限定されるものではない。
【実施例1】
【0014】
図1は、実施例1に係るストレージ装置のブロック図である。図1に示すように本実施例に係るストレージ装置1は、データ受信部10、チェックコード付加部11、主記憶部12、世代コード管理部13、世代コード退避部14、データ書込部15、データ読出部16、判定部17、データ送信部18及び記憶装置19を有している。また、ストレージ装置1は、ホスト2とネットワークなどを介して接続されている。そして、ストレージ装置1は、ホスト2との間でデータの送受信が可能である。
【0015】
記憶装置19は、複数のHDDを有している。そして、記憶装置19のHDDを用いて複数のRAID(Redundant Arrays of Inexpensive Disks)構成(アレイセット)が作成されている。そして、各RAID構成には識別子としてRAID番号が与えられている。さらに、各RAID構成は、それぞれのRAID構成におけるファイルの格納位置であるRAID LBA(Logical Block Address)を有している。RAID LBAは、ディスクへのI/O(Input/Output)単位であるブロック毎に割り当てられている。すなわち、RAID番号とRAID LBAが特定されれば、どのRAID構成のどこにあるデータかが決まり、記憶装置19の中からデータが一意的に決まることになる。以下では、1ブロックのサイズを有する個々のデータ、すなわちディスクへのI/O単位のデータを単に「ブロックデータ」と呼ぶことがある。
【0016】
主記憶部12は、SDRAMなどのメモリである。そして、主記憶部12は、データキャッシュ部121及び世代コード記憶部122を有している。世代コード記憶部122は、図2に示すような、世代コントロールブロック200を予め記憶しておく。主記憶部12は、世代コントロールブロック200に対応させてその世代コントロールブロック200が最後にアクセスされた日時も記憶している。図2は、世代コントロールブロックを説明するための図である。世代コントロールブロック200は、各ブロックデータの世代コードを管理するためのテーブルである。世代コード記憶部122は、予め決められた所定容量分の世代コントロールブロックを記憶している。ここで、図2を参照して、世代コントロールブロック200について詳細に説明する。
【0017】
世代コントロールブロック200は、位置情報領域201、連続管理領域202及び世代コードテーブル203を有している。位置情報領域201には、RAID番号及びStripe番号が記載されている。また、連続管理領域202には、世代コードテーブル203に記載された各ブロックデータの世代コードをまとめて1つとして扱うか否かを示す値である連続世代コードが有効か否かを示すフラグが記載されている。また、連続世代コードが有効の場合、連続管理領域202には、連続世代コードの情報が記載されている。連続世代コードについては後で詳細に説明する。世代コードテーブル203は、RAID LBAが連続する所定個のブロックデータの世代コードを記載する世代コード欄231を有している。ここで、本実施例では、世代コードテーブル203は、所定個の世代コード欄231としてRAID構成のストライプの数の世代コード欄231を有している。ここで、ストライプとは、RAID構成において一度に書き込むことができる個数のデータの組を表している。ストライプの数は、例えば、RAID構成において一度にデータを書き込む対象となる物理的なハードディスクの数である。
【0018】
そして、世代コントロールブロック200は、記憶装置19の各RAID構成のRAID LBAの全て網羅する数だけ予め作成されている。例えば、記憶装置19が1つのRAID構成を有しており、RAID LBAが1〜100まである場合で説明する。言い換えれば、この記憶装置19は、100個のブロックデータを記憶できるものである。そして、世代コードテーブル203に10個のブロックデータの世代コードが記載できるとすると、この場合、10個の世代コントロールブロック200が予め用意されている。これは、具体的には、RAID LBA1〜10に対応する世代コントロールブロック200、RAID LBA10〜20に対応する世代コントロールブロック200、・・・、RAID LBA90〜100に対応する世代コントロールブロック200となる。
【0019】
世代コード退避部14は、大容量の不揮発性メモリである。この不揮発性メモリとは、例えば、SSD(Solid State Drive)、Flashメモリ、HDDなどである。世代コード退避部14は、予め作成されている記憶装置19の各RAID構成のRAID LBAの全て網羅する数だけの世代コントロールブロック200(以下では、「記憶容量分の世代コントロールブロック」という。)を記憶している。ここで、本実施例では世代コード退避部14は、記憶容量分の世代コントロールブロック200を全て記憶しているとしたが、これは他の方法でも良い。例えば、世代コード記憶部122が保持している世代コントロールブロック200は、世代コード退避部14は保持しなくても良い。
【0020】
次に、データの書き込み側の構成及び動作について説明する。データ受信部10は、記憶装置19に書き込むデータである書込データをホスト2から受信する。この書込データは、1つ又は複数のブロックデータを含んでいる。このブロックデータが「所定サイズ」の一例にあたる。データ受信部10は、受信したデータをチェックコード付加部11へ出力する。
【0021】
チェックコード付加部11は、書込データに含まれる各ブロックデータに世代コード以外のチェックコードを付加する。このチェックコード付加部11により付加されるチェックコードは、例えば、CRC(Cyclic Redundancy Check),RAID番号及びFlag、RAID LBAなどである。そして、チェックコード付加部11は、世代コード以外のチェックコードを付加した各ブロックデータを主記憶部12のデータキャッシュ部121に格納する。
【0022】
世代コード管理部13は、データキャッシュ部121に蓄積されたブロックデータを記憶装置19に書き込む旨の通知を、書き込むブロックデータの識別情報とともに、後述するデータ書込部15から受信する。以下では、データキャッシュ部121に蓄積されたブロックデータを記憶装置19に書き込むことを「ライトバック」と呼ぶことがある。以下では、ライトバックが行われることがデータ書込部15から通知されたブロックデータについて説明する。世代コード管理部13は、ブロックデータのチェックコードを用いてブロックデータに含まれるブロックの世代コードが記載された世代コントロールブロックを世代コード記憶部122から検索する。ここで、ブロックデータに世代コードが未だ記載されていない場合には、世代コード管理部13は、世代コントロールブロックの検索を行わない。
【0023】
ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に格納されていない場合、世代コード管理部13は、そのブロックデータの世代コードが記載された世代コントロールブロックを世代コード退避部14から読み出す。そして、世代コード管理部13は、世代コード記憶部122に記憶されているアクセス日時を用いて、アクセスされた日時が最も古い世代コントロールブロックを特定する。そして、世代コード管理部13は、世代コード記憶部122に記憶されているアクセスされた日時が最も古い世代コントロールブロックを世代コード退避部14に移動する。この時、世代コード管理部13は、移動した世代コントロールブロックで世代コード退避部14に記憶されている対応する世代コードコントロールテーブルを更新する。そして、世代コード管理部13は、世代コード退避部14から読みだした世代コントロールブロックを世代コード記憶部122に格納する。
【0024】
世代コード管理部13は、ライトバックが通知されたコントロールブロックを含むデータキャッシュ部121に格納されている連続するブロックデータが、世代コントロールブロックに世代コードが記載された全てのブロックデータを含むか否かを判定する。この1つの世代コードテーブルに世代コードが記載された全てのブロックデータをまとめたものを「連続データ」という。すなわち、連続データは、ある世代コードテーブルの先頭のブロックからRAID LBAがストライプの数連続するブロックデータの集合である。
【0025】
図3−1は、世代コントロールブロックへの連続世代コードの書き込みを説明するための概念図である。図3−1では、世代コントロールブロックの連続管理領域202及び世代コードテーブル203のみを抜き出して記載している。世代コントロールブロック200aが連続世代コードを書き込む前の状態を表す。また、世代コントロールブロック200bが連続世代コードを書き込んだ後の状態を表す。世代コード管理部13は、連続データがある場合、その連続データに対応する世代コントロールブロックの連続管理領域202の連続世代コードが有効か否かを示すフラグ(以下では、「連続フラグ」と言う場合がある。)を確認する。連続世代コードが無効の場合、すなわち、図3−1の世代コントロールブロック200aの場合、世代コード管理部13は、その連続管理領域202の連続世代コードを有効にする。ここで、連続世代コードを有効にすると、世代コードテーブル203に含まれる個々のブロックの世代コード欄は無効になる。世代コードテーブル200bの世代コードテーブル203が点線で表されているのは無効であることを表している。そして、世代コード管理部13は、世代コントロールブロック200aの世代コードテーブル203に記載されている世代コードのうちの最大値を1つインクリメントしたものを連続世代コードとして連続管理領域に書き込む。これにより、世代コントロールブロック200bのように、連続管理領域202の連続世代コードが有効となり、連続世代コードが6となる。
【0026】
図3−2は、連続世代コードを用いない場合の世代コントロールブロックへの世代コードの書き込みを説明するための概念図である。ここで、図3−2を用いて、連続世代コードを使用しない場合の世代コードの更新を説明する。図3−2では、世代コードテーブル203のみ記載している。図3−2は、紙面に向かって上の状態の各世代コードが更新されて紙面に向かって下の状態になったことを表している。図3−2に示すように、各ブロックの世代コードを更新するには、各ブロックの世代コードをそれぞれ1つインクリメントして、それぞれの値を書き込んでいかなくてはならない。この点、連続世代コードを使用した場合には、連続フラグの確認と必要があれば連続フラグの変更を行い、連続世代コードの書き込みを行うだけなので、世代コードを書き込む負荷が連続世代コードを使用しない場合に比べて軽減できる。
【0027】
連続世代コードが有効の場合、世代コード管理部13は、その連続管理領域に記載された連続世代コードを1つインクリメントした値を書き込む。
【0028】
図4は、連続世代コードが有効な世代コントロールブロックへの各ブロックデータ別の世代コードの書き込みを説明するための概念図である。図4は、世代コントロールブロック200cの世代コード欄232の世代コードが更新する場合を表している。世代コード管理部13は、書込データの連続データ以外のブロックに対して、そのブロックの世代コードが記載されている世代コントロールブロックの連続管理領域の連続世代コードが有効か否かを示すフラグを確認する。連続世代コードが有効の場合、世代コントロールブロックは、図4の世代コントロールブロック200cのようになっている。そして、世代コントロールブロック200cの世代コード欄232を更新する場合、世代コード管理部13は、連続フラグを無効にして、連続世代コードを無効にする。これにより、世代コントロールブロック200dの世代コードテーブル203のように、各ブロックデータの世代コードを表す世代コード欄が有効になる。そして、世代コード管理部13は、世代コード欄232に記載されている値を1つインクリメントした値を、世代コード欄232に書き込む。このとき、世代コード管理部13は、世代コードテーブル203の世代コード欄232以外の世代コード欄それぞれに、連続世代コードとして与えられていた値を書き込む。
【0029】
連続世代コードが無効の場合、世代コード管理部13は、世代コードの更新対象であるブロックデータの世代コードが記載されている世代コード欄の値を1つインクリメントした値をその欄に書き込む。
【0030】
さらに、世代コード管理部13は、世代コントロールブロックで記載した各ブロックデータに対応する世代コードを、データキャッシュ部121に記載されている各ブロックデータのチェックコードに付加する。図5は、世代コードが付加された状態のブロックデータを表す図である。世代コード管理部13により世代コードが付加されたブロックデータは300、図5に示すように、実際のデータ301及びチェックコード302からなる。そして、チェックコード302は、CRC321、RAID番号322、Flag323、世代コード324及びRAID LBA325からなる。ここで、Flag323は、データの有効/無効や、パリティを示すものである。このように、本実施例に係るストレージ装置では、ホスト2から受信した書込データ300に含まれるブロックデータそれぞれに更新の状態を表す世代コード324が付加される。
【0031】
データ書込部15は、記憶装置19の動作状態及びデータキャッシュ部121へのブロックデータの蓄積状態から、ブロックデータのライトバックのタイミングを決定する。そして、データ書込部15は、ライトバックを行うブロックデータの識別情報を世代コード管理部13へ通知する。
【0032】
データ書込部15は、世代コードが付加されたブロックデータをデータキャッシュ部121から取得する。そして、データ書込部15は、ブロックデータのチェックコードに記載されている、RAID番号及びRAID LBAが示す記憶装置19のアドレスに書込データを書き込む。
【0033】
図6は、データ書き込み時の処理を説明するための図である。ここで、図6を参照して、本実施例に係るストレージ装置1のデータ書き込み時の処理の全体的な流れを説明する。
【0034】
まず、書込データに含まれるブロックデータが、主記憶部12のデータキャッシュ部121に格納される(ステップS101)。次に、世代コード管理部13は、ライトバックが通知されたブロックデータの世代コードを含む世代コントロールブロックが世代コード記憶部122にあるか否か判定する。そして、該当する世代コントロールブロックが世代コード記憶部122に無い場合、世代コード管理部13は、世代コード退避部14から該当する世代コントロールブロックを読み込む。そして、世代コード管理部13は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する(ステップS102)。それとともに、世代コード管理部13は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する(ステップS103)。そして、世代コード管理部13は、世代コード記憶部122に記憶されている世代コントロールブロックに記載されたライトバックの対象のブロックデータの世代コードを1つインクリメントし更新する。この更新には、連続世代コードを使用した場合の更新も含まれる。そして、世代コード管理部13は、データキャッシュ部121に格納されているブロックデータの世代コードを世代コントロールブロックに記載した新しい世代コードに更新する(ステップS104)。そして、新しい世代コードが付加されたブロックデータは、記憶装置19に格納される(ステップS105)。
【0035】
図2に戻って、本実施例に係るストレージ装置1におけるデータ読み出し側の構成及び動作について説明する。データ読出部16は、ホスト2からデータの読み出し要求を受ける。そして、データ読出部16は、指定されたデータを記憶装置19から読み出す。このデータは、1つ又は複数のブロックデータで構成されている。そして、データ読出部16は、読み出したデータを主記憶部12のデータキャッシュ部へ格納する。
【0036】
判定部17は、データ読出部16が記憶装置19から読み出しデータキャッシュ部121に格納したブロックデータを参照する。そして、判定部17は、受信したブロックデータの世代コードが記載された世代コントロールブロックを、世代コード記憶部122に格納されている世代コントロールブロックの中から検索する。このとき、判定部17は、受信したデータが格納されていたRAID番号及びストライプ(Stripe)番号と図2に記載した世代コントロールブロック200の位置情報領域201とを用いて検索を行う。ストライプ番号とは、あるRAIDにおいてストライプの数のデータを一組とした場合に、どの組であるかを識別するための識別子である。
【0037】
受信したデータに含まれるブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に無い場合、判定部17は、世代コード退避部14から当該ブロックデータの世代コードが記載された世代コントロールブロックを読み込む。そして、判定部17は、世代コード記憶部122に記憶されているアクセス日時を用いて、アクセスされた日時が最も古い世代コントロールブロックを特定する。そして、判定部17は、アクセスされた日時が最も古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する。この時、判定部17は、移動した世代コントロールブロックで世代コード退避部14に記憶されている対応する世代コードコントロールテーブルを更新する。そして、判定部17は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する。
【0038】
判定部17は、受信したデータに含まれる各ブロックデータの世代コードと、世代コード記憶部122に記憶されている世代コントロールブロックに記載された当該ブロックデータの世代コードとを比較する。
【0039】
判定部17は、受信したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致した場合、受信したデータの識別情報をデータ送信部18へ出力する。
【0040】
これに対して、受信したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致しない場合、判定部17は、そのブロックデータを格納していたHDDで書き損じが発生したと判定する。この場合、本実施例では、判定部17は、書き損じが発生したと判定したHDDを切り離す。その後、判定部17は、記憶装置19に対してRAIDの縮退処理の実行を命令する。
【0041】
ここで、本実施例では、機能構成として判定部17と世代コード管理部13とを分けたがこれらは1つにまとめても良い。また、本実施例では、判定部17が、世代コード退避部14から世代コード記憶部122へ世代コントロールブロックを移動する処理を行っているが、この処理を判定部17が行わずに、世代コード管理部13が代わりに行っても良い。その場合、判定部17は、受信したデータに含まれるブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122に無いと判定すると、世代コード管理部13にその旨の通知を行う。そして、世代コード管理部13は、判定部17からの通知を受けて、世代コード退避部14から世代コード記憶部122へ世代コントロールブロックを移動する処理を行うことになる。
【0042】
データ送信部18は、データの識別情報の入力を判定部17から受ける。そして、データ送信部18は、受信した識別情報を有するデータをデータキャッシュ部121から読み出す。そして、データ送信部18は、読み出したデータをホスト2へ送信する。
【0043】
図7は、データ読み出し時の処理を説明するための図である。ここで、図7を参照して、本実施例に係るストレージ装置のデータ読み出し時の処理の全体的な流れを説明する。
【0044】
まず、データ読出部16により記憶装置19から読み出されたデータが、主記憶部12のデータキャッシュ部121に格納される(ステップS201)。次に、判定部17が、読み出されたデータに含まれる各ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否か判定する。そして、該当する世代コントロールブロックが世代コード記憶部122に無い場合、判定部17は、世代コード退避部14から該当する世代コントロールブロックを読み込む。そして、判定部17は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14へ移動する(ステップS202)。それとともに、判定部17は、読み込んだ世代コントロールブロックを世代コード記憶部122に格納する(ステップS203)。そして、判定部17は、読み出されたデータに含まれる各ブロックデータの世代コードと、世代コード記憶部122に記憶されている世代コントロールブロックに記載された当該ブロックデータの世代コードとを比較する(ステップS204)。そして、判定部17により世代コードが同じだと判定された場合、データ送信部18は、データキャッシュ部121に格納されているデータをホスト2へ送信する(ステップS205)。これに対して、判定部17により世代コードが異なると判定された場合、判定部17は書き損じが発生したと判定する。そして、判定部17は、書き損じが発生したHDDを切り離す。そして、判定部17は、記憶装置19に対してRAIDの縮退処理の実行を命令する。
【0045】
次に、図8を参照して、本実施例に係るストレージ装置における書き込み処理の流れを説明する。図8は、実施例1に係るストレージ装置における書き込み処理のフローチャートである。
【0046】
データ受信部10は、ホスト2から書き込みデータを受信する(ステップS301)。そして、チェックコード付加部11は、書込データに含まれる各ブロックデータに世代コード以外のチェックコードを付加してデータキャッシュ部121へ格納する。そして、世代コード管理部13は、記憶装置19へのライトバックを開始する旨の通知をデータ書込部15から受信するまで待機している。
【0047】
世代コード管理部13は、ライドバックするブロックデータに既に世代コードが付加されているか否かを判定する(ステップS302)。世代コードが付加されている場合(ステップS302肯定)、世代コード管理部13は、当該ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否かを判定する(ステップS303)。世代コード記憶部122に該当する世代コントロールブロックがない場合(ステップS303否定)、世代コード管理部13は、該当する世代コントロールブロックを世代コード退避部14から世代コード記憶部122に移動させる(ステップS304)。この時、世代コード管理部13は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14に移動する。
【0048】
そして、世代コード記憶部122に該当する世代コントロールブロックがある場合(ステップS303肯定)、世代コード管理部13は、世代コード記憶部122から当該ブロックデータの世代コードを読み込む(ステップS305)。また、世代コントロールブロックを世代コード退避部14から世代コード記憶部122に移動させた後、世代コード管理部13は、世代コード記憶部122から当該ブロックデータの世代コードを読み込む(ステップS305)。
【0049】
また、ライトバックするブロックデータに未だ世代コードが付加されていない場合(ステップS302否定)、ステップS306へ進む。
【0050】
世代コード管理部13は、書込データに含まれるブロックデータで構成された連続データにライトバックするブロックデータが含まれるか否かを判定する(ステップS306)。
【0051】
ライトバックするブロックデータが連続データに含まれる場合(ステップS306肯定)、世代コード管理部13は、当該ブロックデータの世代コードが記載された世代コントロールブロックの連続フラグを参照する。そして、世代コード管理部13は、連続世代コードが有効になっているか否かを判定する(ステップS307)。連続世代コードが無効の場合(ステップS307否定)、世代コード管理部13は、該当する世代コントロールブロックの連続フラグを変更し、連続世代コードを有効にする(ステップS308)。これに対して、連続世代コードが有効の場合(ステップS307肯定)、ステップS309に進む。
【0052】
世代コード管理部13は、該当する世代コントロールブロックの連続世代コードを1つインクリメントする(ステップS309)。
【0053】
これに対して、ライトバックするブロックデータが連続データに含まれない場合(ステップS306否定)、世代コード管理部13は、当該ブロックデータの世代コードを含む世代コントロールブロックの連続フラグを参照する。そして、世代コード管理部13は、連続世代コードが有効になっているか否かを判定する(ステップS310)。連続世代コードが有効の場合(ステップS310肯定)、世代コード管理部13は、該当する世代コントロールブロックの連続フラグを変更し、連続世代コードを無効にして世代コードの管理を分離する(ステップS311)。これに対して、連続世代コードが無効の場合(ステップS310否定)、ステップS312に進む。
【0054】
世代コード管理部13は、該当する世代コードテーブルの連続世代コードにおける書込データの各ブロックの世代コードを1つインクリメントする(ステップS312)。
【0055】
そして、世代コード管理部13は、ライトバックが行われる各ブロックデータに世代コードを書き込む(ステップS313)。
【0056】
データ書込部15は、世代コードが付加されたブロックデータを記憶装置19に書き込む(ステップS314)。
【0057】
次に、図9を参照して、本実施例に係るストレージ装置における読み出し処理の流れを説明する。図9は、実施例1に係るストレージ装置における読み出し処理のフローチャートである。
【0058】
データ読出部16は、ホスト2からの要求を受けて、指定されたデータを記憶装置19のHDDから読み出す(ステップS401)。そして、データ読出部16は、読み出したデータをデータキャッシュ部121に格納する。
【0059】
判定部17は、データキャッシュ部121に書き込まれたデータに含まれる各ブロックデータの世代コードが記載された世代コントロールブロックが世代コード記憶部122にあるか否かを判定する(ステップS402)。該当する世代コントロールブロックが有る場合(ステップS402肯定)、ステップS404へ進む。これに対して、該当する世代コントロールブロックが無い場合(ステップS402否定)、判定部17は、該当する世代コントロールブロックを世代コード退避部14から世代コード記憶部122へ移動する(ステップS403)。この時、判定部17は、アクセスされた日時が一番古い世代コントロールブロックを世代コード記憶部122から世代コード退避部14に移動する。
【0060】
判定部17は、読み出したデータに含まれるブロックデータの世代コードと世代コントロールブロックに記載された世代コードとが一致するか否かを判定する(ステップS404)。読み出したデータに含まれるブロックデータの世代コードが一致した場合(ステップS404肯定)、データ送信部18は、データをホスト2に送信する(ステップS405)。
【0061】
これに対して、読み出したデータに含まれるブロックデータに世代コードが一致しないものがある場合(ステップS404否定)、判定部17は、当該ブロックを含むHDDを切り離す(ステップS406)。その後、ストレージ装置1は、HDDのRAID縮退処理を実行する。
【0062】
図10は、実施例1に係るストレージ装置のハードウェア構成を表す構成図である。本実施例に係るストレージ装置1は、図10に示すように、CPU101、メモリ102、バックアップデバイス103、I/Oコントローラ104及びI/Oコントローラ105を有しており、さらに、HDD3を複数有している。
【0063】
このCPU101が、チェックコード付加部11、世代コード管理部13及び判定部17の機能を有する。また、CPU101は、上述したストレージ装置1で行われる処理の制御を統括する。また、メモリ102が、主記憶部12の機能を有する。また、バックアップデバイス103が、世代コード退避部14の機能を有する。また、I/Oコントローラ104がデータ受信部10及びデータ送信部18の機能を有する。また、I/Oコントローラ105が、データ書込部15及びデータ読出部16の機能を有する。そして、HDD3をまとめたものが、記憶装置19の機能を有する。
【0064】
以上に説明したように、本実施例に係るストレージ装置は、HDDへの書き込み時に各ブロックに更新状態を表す世代コードを付加し、読み出し時にその世代コードをチェックすることで、データの書き損じを検出することができる。特に、本実施例に係るストレージ装置は、ブロックがRAIDを構成するストライプ分連続している場合、ブロックを一つにまとめて一つの世代コードを付加し、ストライプ分連続していない場合、ブロック毎に世代コードを付加する。これにより、世代コードの付加及び付加された世代コードを用いたデータのチェックの処理の負荷を軽減することができる。したがって、高い信頼性を維持しつつ、エラーチェックのための処理の負荷を軽減することができる。
【0065】
ここで、本実施例では、ハードディスクへの書き込みや読み出しを考慮し、連続データとして取り扱う個数である「所定個」をストライプの数として、RAIDを構成するストライプ分データが連続した場合に連続データとして取り扱うこととした。しかし、この連続データとして取り扱う個数は他の値を用いても良い。例えば、2ストライプ分のブロックデータであってもよいし、1000個のブロックデータなどとしてもよい。
【実施例2】
【0066】
次に、実施例2に係るストレージ装置について説明する。本実施例に係るストレージ装置は、データの読み出しを効率化するためにハッシュテーブル及びLRUリンクを用いたことが実施例1と異なるものである。本実施例に係るストレージ装置のブロック図も図1のブロック図と同様である。ここで、実施例1と同様の符号を有する各部は特に説明の無い限り本実施例においても同様の機能を有するものとする。
【0067】
図11は、実施例2に係るストレージ装置で用いられる世代コントロールブロックの一例を表す図である。本実施例の世代コントロールブロック200は、図2で表される実施例1の世代コントロールブロックにハッシュ情報領域204及びLRUリンク接続情報領域205をくわえたものである。ハッシュ情報領域204には、ハッシュリンク接続情報が記載されている。ここで、ハッシュリンク接続情報とは、世代コントロールブロック200がリンクされているハッシュテーブル上のハッシュ値を表す情報である。このハッシュ値は、RAID番号、RAID LBA,BlokCountをキーにして生成される。「BlockCount」は、ブロックデータを構成するセクタ数を表す値である。ここでは、「BlockCount」は、1つのRAID LBAがふられた領域の記憶容量を示すものである。
【0068】
図12は、ハッシュテーブルの一例を表す図である。世代コード管理部13は、図12に示すようなハッシュテーブルを記憶している。図12に示すように、本実施例に係るハッシュテーブル400は、各ハッシュ値に対して複数の世代コントロールブロックがぶら下がるリンク構造を有している。ここで、世代コントロールブロックの後ろに付加した「#n」は各世代コントロールブロックの識別子とする。例えば、ハッシュテーブル400の欄401に記載されているハッシュ値を例に説明する。欄401に記載されたハッシュ値に対しては、世代コードブロック#3、世代コントロールブロック#6、世代コントロールブロック#4の順にリンクされている。
【0069】
そして、世代コード管理部13は、データ受信部10が割り当てたRAID番号、RAID LBA,BlokCountをキーにハッシュ値を算出する。そして、世代コード管理部13は、算出したハッシュ値を基にハッシュテーブルを参照し、アクセスしたい世代コントロールブロックが既に世代コード記憶部122上に展開されているか否かを判定する。例えば、世代コード管理部13が、世代コントロールブロック#6に世代コードが記載されたブロックを基に検索する場合で説明する。世代コード管理部13は、ブロックに割り当てられたRAID番号、RAID LBA及びBlokCountからハッシュ値を算出する。ここでは、世代コード管理部13は、ハッシュテーブル400の欄401のハッシュ値を得る。そして、世代コード管理部13は、欄401のハッシュ値をハッシュテーブル上で検索する。そして、世代コード管理部13は、欄401のハッシュ値にリンクされている世代コントロールブロックを前から順に検索する。まず、世代コード管理部13は、世代コントロールブロック#3に該当するブロックデータの世代コードがあるか否か検索する。ここでは、世代コントロールブロック#3には、該当するブロックデータの世代コードはない。そこで、次に、世代コード管理部13は、世代コントロールブロック#6を検索する。ここで、世代コード管理部13は、世代コントロールブロック#6に該当するブロックデータの世代コードが記載されていることを検出する。そして、世代コード管理部13は、世代コントロールブロックが世代コード記憶部122に展開されているか否かを判定する。
【0070】
このようにハッシュテーブルを使うことで、ハッシュを用いずに全ての世代コントロールブロックを1つずつ調べてアクセスしたい世代コントロールブロックを検索する場合に比べて、対象とする世代コントロールブロックに迅速にアクセスすることができる。
【0071】
また、図13は、実施例2に係るストレージ装置における世代コントロールブロックの記憶方法を説明するための図である。本実施例に係るストレージ装置では、世代コード記憶部122は、図13のように、LRU(Least Recently Used)方式を用いて、アクセスされた日時の古い順に世代コントロールブロックを記憶している。
【0072】
具体的には、図11で示すように、世代コントロールブロック200のLRUリンク接続情報領域205に、LRUリンク接続情報が記載されている。このLRU接続情報は、世代コード記憶部122に記憶された日時の古いそれぞれの世代コントロールブロックの順番を示す情報である。図13の世代コード記憶部122の状態では、世代コントロールブロック#1が一番古く、世代コントロールブロック#3、世代コントロールブロック#4と順に新しくなり、世代コントロールブロック#2が最も新しくアクセスされたことを表している。
【0073】
世代コード管理部13は、世代コード記憶部122の中から特定の世代コントロールブロックを検索する場合、LRU接続情報を基にアクセスの新しいものから順に検索を行う。例えば、世代コントロールブロック#4を検索する場合、世代コード管理部13は、まず、世代コントロールブロック#2を確認し、次に世代コントロールブロック#4を確認することで検索を終えることができる。
【0074】
そして、世代コード管理部13は、世代コード記憶部122に特定の世代コントロールブロックが無い場合、世代コード退避部14から該当する世代コントロールブロックを読み出し、世代コード記憶部122に記憶させる。この時、世代コード管理部13は、LRUリンク接続情報から最も古くアクセスがあった世代コントロールブロックを取り出し、バックアップデバイスに入れる。そして、世代コード管理部13は、特定の世代コントロールブロックを世代コード退避部14から取得し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。ここで、一例として、図13の主記憶部12の状態で、世代コード管理部13が世代コントロールブロック#5を主記憶部12に移す場合を説明する。世代コード管理部13は、LRU接続情報を用いて、一番アクセスの古い世代コントロールブロック#1を主記憶部12から取り出し、世代コード退避部14へ書き込む。そして、世代コード管理部13は、世代コード退避部14から世代コントロールブロック#5を読み出し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。図13で表されるイメージとしては、並んでいるリンクの一番後ろに世代コントロールブロック#5が加えられることになる。また、リンク順の途中にある世代コントロールブロックを用いる場合、世代コード管理部13は、該当する世代コントロールブロックを抜き出し、LRUリンク接続情報として最新のアクセスがあったことを示す値をつけ世代コード記憶部122に記憶させる。
【0075】
このように、LRU方式を用いて世代コントロールブロックを記憶することで、アクセス頻度の高い世代コントロールブロックほど早く見つけることができる。このため、何度も行われる書き込み及び読み込み処理をまとめてみた場合、全体的な処理速度を向上させることができる。
【0076】
また、判定部17は、図12に示すようなハッシュテーブルを記憶している。判定部17は、ブロックに割り当てられたRAID番号、RAID LBA及びBlokCountをキーにハッシュ値を算出する。そして、判定部17は、算出したハッシュ値を基にハッシュテーブルを参照し、アクセスしたい世代コントロールブロックが既に世代コード記憶部122上に展開されているか否かを判定する。
【0077】
また、判定部17は、世代コード記憶部122の中から特定の世代コントロールブロックを検索する場合、LRU接続情報を基にアクセスの新しいものから順に検索を行う。
【0078】
以上に説明したように、本実施例に係るストレージ装置では、ハッシュテーブル及びLRU方式を用いて、世代コントロールブロックの検索を行う。これにより、世代コントロールブロックの検索効率を向上させることができ、ストレージ装置における書き込み及び読み込み処理の速度が向上する。
【0079】
さらに、以上で説明した各実施例の変形例として、例えば次のような変形例がある。
【0080】
まず、ストレージ装置1の電源をオフにする場合、世代コード管理部13は、世代コード記憶部122に格納されている世代コントロールブロックを、世代コード退避部14に移動させる。この場合、世代コード退避部14に記憶されている世代コントロールブロックは更新される。そして、世代コードブロックの移動が全て完了した後に、ストレージ装置1の電源がオフになる。
【0081】
このようにすることで、電源オフのときにメモリ上にあった世代コントロールブロックの情報を維持することができる。これにより、電源オフの後再起動した場合でも、確実に書き損じなどのエラーをチェックすることができる。
【0082】
また、ストレージ装置1に停電時用のバッテリを配置する。そして、停電が発生した場合、バッテリからCPU101、メモリ102、バックアップデバイス103、I/Oコントローラ104及びI/Oコントローラ105を有するコントローラボードへ電源を供給する。そして、バッテリ駆動期間中に、世代コード記憶部122に格納されている世代コントロールブロックを、世代コード退避部14に移動させる。
【0083】
このようにすることで、停電時にもメモリ上にあった世代コントロールブロックの情報を維持することができる。これにより、停電が発生した場合でも、復旧後に確実に書き損じなどのエラーをチェックすることができる。
【0084】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0085】
(付記1)所定サイズのデータであるブロックデータを含む書込データを受信するデータ受信部と、
前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する世代コード記憶部と、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる世代コード管理部と、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込むデータ書込部と、
前記記憶装置から前記ブロックデータ又は連続データを読み出すデータ読出部と、
前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する判定部と、
前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信するデータ送信部と
を備えたことを特徴とするストレージ装置。
【0086】
(付記2)前記世代コード管理部は、前記連続データに対して新しい世代コードを割り当てた場合、該連続データを構成するブロックデータの識別情報に対応させて新しい世代コードを前記世代コード記憶部に記憶させ、前記ブロックデータそれぞれに新しい世代コードを割り当てた場合、各前記ブロックデータの識別情報それぞれに対応させて新しい世代コードを前記世代コード記憶部に記憶させることを特徴とする付記1に記載のストレージ装置。
【0087】
(付記3)前記記憶装置は、複数のハードディスクから成り、且つ該ハードディスクを用いて生成されたRAID構成を有しており、
前記連続データは、前記RAID構成におけるストライブの数の連続するブロックデータからなることを特徴とする付記1又は付記2に記載のストレージ装置。
【0088】
(付記4)前記世代コード記憶部は、前記連続データの世代コードが各ブロックデータの識別情報に対応するよう記載されたテーブルである世代コントロールブロックを用いて前記世代コードを記憶することを特徴とする付記1〜付記3のいずれか一つに記載のストレージ装置。
【0089】
(付記5)前記世代コード記憶部より容量が大きい記憶領域を有し、少なくとも前記世代コード記憶部が記憶する世代コードに対応するブロックデータ以外の前記記憶装置に記憶されているブロックデータの各世代コードが記載された前記世代コントロールブロックを記憶する世代コード退避部をさらに備え、
前記世代コード管理部は、前記書込データに含まれる前記ブロックデータの世代コードの情報が記載された世代コントロールブロックが前記世代コード退避部にある場合、前記世代コード記憶部に記憶されている最もアクセス日時の古い世代コントロールブロックと前記書込データに含まれるブロックデータの世代コードの情報を含む世代コントロールブロックとを入れ替えることを特徴とする付記4に記載のストレージ装置。
【0090】
(付記6)前記世代コード管理部及び前記判定部は、前記世代コントロールブロックの格納先を示すハッシュテーブルを有しており、
前記世代コード管理部及び前記判定部は、前記ハッシュテーブルを用いて前記世代コントロールブロックを検索する
ことを特徴とする付記4又は付記5に記載のストレージ装置。
【0091】
(付記7)所定サイズのデータであるブロックデータを含む書込データを受信し、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた前記世代コードを各前記ブロックデータ又は前記連続データの識別情報と対応させてメモリに記憶させ、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加しハードディスクに書き込み、
前記ハードディスクから前記ブロックデータ又は連続データを読み出し、
読み出した前記ブロックデータ又は連続データに付加されている世代コードと前記メモリに記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定し、
前記世代コードが一致すると判定した場合、前記読み出したブロックデータ又は連続データを送信する
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【0092】
1 ストレージ装置
2 ホスト
3 ハードディスク
10 データ受信部
11 チェックコード付加部
12 主記憶部
13 世代コード管理部
14 世代コード退避部
15 データ書込部
16 データ読出部
17 判定部
18 データ送信部
19 記憶装置
【特許請求の範囲】
【請求項1】
所定サイズのデータであるブロックデータを含む書込データを受信するデータ受信部と、
前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する世代コード記憶部と、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる世代コード管理部と、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込むデータ書込部と、
前記記憶装置から前記ブロックデータ又は連続データを読み出すデータ読出部と、
前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する判定部と、
前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信するデータ送信部と
を備えたことを特徴とするストレージ装置。
【請求項2】
前記世代コード管理部は、前記連続データに対して新しい世代コードを割り当てた場合、該連続データを構成するブロックデータの識別情報に対応させて新しい世代コードを前記世代コード記憶部に記憶させ、前記ブロックデータそれぞれに新しい世代コードを割り当てた場合、各前記ブロックデータの識別情報それぞれに対応させて新しい世代コードを前記世代コード記憶部に記憶させることを特徴とする請求項1に記載のストレージ装置。
【請求項3】
前記世代コード記憶部は、前記連続データの世代コードが各ブロックデータの識別情報に対応するよう記載されたテーブルである世代コントロールブロックを用いて前記世代コードを記憶することを特徴とする請求項1又は請求項2に記載のストレージ装置。
【請求項4】
前記世代コード記憶部より容量が大きい記憶領域を有し、少なくとも前記世代コード記憶部が記憶する世代コードに対応するブロックデータ以外の前記記憶装置に記憶されているブロックデータの各世代コードが記載された前記世代コントロールブロックを記憶する世代コード退避部をさらに備え、
前記世代コード管理部は、前記書込データに含まれる前記ブロックデータの世代コードの情報が記載された世代コントロールブロックが前記世代コード退避部にある場合、前記世代コード記憶部に記憶されている最もアクセス日時の古い世代コントロールブロックと前記書込データに含まれるブロックデータの世代コードの情報を含む世代コントロールブロックとを入れ替えることを特徴とする請求項3に記載のストレージ装置。
【請求項5】
前記世代コード管理部及び前記判定部は、前記世代コントロールブロックの格納先を示すハッシュテーブルを有しており、
前記世代コード管理部及び前記判定部は、前記ハッシュテーブルを用いて前記世代コントロールブロックを検索する
ことを特徴とする請求項3又は請求項4に記載のストレージ装置。
【請求項6】
所定サイズのデータであるブロックデータを含む書込データを受信し、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた前記世代コードを各前記ブロックデータ又は前記連続データの識別情報と対応させてメモリに記憶させ、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加しハードディスクに書き込み、
前記ハードディスクから前記ブロックデータ又は連続データを読み出し、
読み出した前記ブロックデータ又は連続データに付加されている世代コードと前記メモリに記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定し、
前記世代コードが一致すると判定した場合、前記読み出したブロックデータ又は連続データを送信する
ことを特徴とするストレージ装置制御方法。
【請求項1】
所定サイズのデータであるブロックデータを含む書込データを受信するデータ受信部と、
前記ブロックデータの更新状態を表す世代コードをブロックデータの識別情報と対応させて記憶する世代コード記憶部と、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた世代コードを前記世代コード記憶部に記憶させる世代コード管理部と、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加し記憶装置に書き込むデータ書込部と、
前記記憶装置から前記ブロックデータ又は連続データを読み出すデータ読出部と、
前記データ読出部により読み出された前記ブロックデータ又は連続データに付加されている世代コードと前記世代コード記憶部に記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定する判定部と、
前記判定部により前記世代コードが一致すると判定された場合、前記読み出されたブロックデータ又は連続データを送信するデータ送信部と
を備えたことを特徴とするストレージ装置。
【請求項2】
前記世代コード管理部は、前記連続データに対して新しい世代コードを割り当てた場合、該連続データを構成するブロックデータの識別情報に対応させて新しい世代コードを前記世代コード記憶部に記憶させ、前記ブロックデータそれぞれに新しい世代コードを割り当てた場合、各前記ブロックデータの識別情報それぞれに対応させて新しい世代コードを前記世代コード記憶部に記憶させることを特徴とする請求項1に記載のストレージ装置。
【請求項3】
前記世代コード記憶部は、前記連続データの世代コードが各ブロックデータの識別情報に対応するよう記載されたテーブルである世代コントロールブロックを用いて前記世代コードを記憶することを特徴とする請求項1又は請求項2に記載のストレージ装置。
【請求項4】
前記世代コード記憶部より容量が大きい記憶領域を有し、少なくとも前記世代コード記憶部が記憶する世代コードに対応するブロックデータ以外の前記記憶装置に記憶されているブロックデータの各世代コードが記載された前記世代コントロールブロックを記憶する世代コード退避部をさらに備え、
前記世代コード管理部は、前記書込データに含まれる前記ブロックデータの世代コードの情報が記載された世代コントロールブロックが前記世代コード退避部にある場合、前記世代コード記憶部に記憶されている最もアクセス日時の古い世代コントロールブロックと前記書込データに含まれるブロックデータの世代コードの情報を含む世代コントロールブロックとを入れ替えることを特徴とする請求項3に記載のストレージ装置。
【請求項5】
前記世代コード管理部及び前記判定部は、前記世代コントロールブロックの格納先を示すハッシュテーブルを有しており、
前記世代コード管理部及び前記判定部は、前記ハッシュテーブルを用いて前記世代コントロールブロックを検索する
ことを特徴とする請求項3又は請求項4に記載のストレージ装置。
【請求項6】
所定サイズのデータであるブロックデータを含む書込データを受信し、
前記書込データにおいて所定個の連続する前記ブロックデータからなる連続データを検出し、前記検出した連続データに対して新しい世代コードを割り当て、前記書込データに含まれる前記連続データ以外のブロックデータのそれぞれに新しい世代コードを割り当て、割り当てた前記世代コードを各前記ブロックデータ又は前記連続データの識別情報と対応させてメモリに記憶させ、
前記新しい世代コードを前記書込データに含まれる前記ブロックデータ及び連続データに付加しハードディスクに書き込み、
前記ハードディスクから前記ブロックデータ又は連続データを読み出し、
読み出した前記ブロックデータ又は連続データに付加されている世代コードと前記メモリに記憶されている前記読み出されたブロックデータ又は連続データの世代コードとが一致するか否かを判定し、
前記世代コードが一致すると判定した場合、前記読み出したブロックデータ又は連続データを送信する
ことを特徴とするストレージ装置制御方法。
【図1】
【図2】
【図3−1】
【図3−2】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3−1】
【図3−2】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2012−168651(P2012−168651A)
【公開日】平成24年9月6日(2012.9.6)
【国際特許分類】
【出願番号】特願2011−27760(P2011−27760)
【出願日】平成23年2月10日(2011.2.10)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成24年9月6日(2012.9.6)
【国際特許分類】
【出願日】平成23年2月10日(2011.2.10)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]