(57)【要約】【課題】記憶装置のデータの格納領域を確保しつつ、書込エラーの検査の信頼性を向上させる。【解決手段】複数の領域５１を有する記憶装置５の領域５１への書込回数を示すカウンタ値６ａを前記領域５１ごとに保持する保持部６に対して、書込対象の第１領域５１に対応するカウンタ値６ａを変化させるとともに、前記保持部６から当該カウンタ値６ａを取得し、前記第１領域５１に書き込むデータ２１ａ，２１ｂに前記取得したカウンタ値２１ｃを付加してブロックデータ２１１を生成し、生成したブロックデータ２１１を前記第１領域５１に書き込み、前記第１領域５１に対応するカウンタ値２１ｃが所定条件を満たしたとき、前記書き込み後に、当該第１領域５１内のブロックデータ２１１を読み出し、前記書き込んだブロックデータ２１１と前記読み出したブロックデータ２１１とを比較し、比較結果が不一致の場合にエラーを通知する。【選択図】図１
2015138372.tif 000002
【特許請求の範囲】
【請求項１】
複数の領域を有する記憶装置に対してデータの入出力を行なうコンピュータに、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得し、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加してブロックデータを生成し、
生成したブロックデータを前記第１領域に書き込み、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書き込み後に、当該第１領域内のブロックデータを読み出し、
前記書き込んだブロックデータと前記読み出したブロックデータとを比較し、比較結果が不一致の場合にエラーを通知する、
処理を実行させることを特徴とする、書込検査プログラム。
【請求項２】
前記コンピュータに、
前記保持部に対して、前記第１領域に対応するカウンタ値を変化させる際に、当該カウンタ値を変化させると所定値に達する場合、当該カウンタ値を初期化する、
処理を実行させ、
前記所定条件は、前記カウンタ値が初期化されたことを含む、
ことを特徴とする、請求項１記載の書込検査プログラム。
【請求項３】
前記コンピュータに、
前記保持部から、読出対象の第２領域に対応するカウンタ値を取得し、
前記第２領域から読み出したブロックデータに含まれるカウンタ値と前記取得したカウンタ値とを比較し、比較結果が不一致の場合にエラーを通知する、
処理を実行させることを特徴とする、請求項１又は請求項２記載の書込検査プログラム。
【請求項４】
前記コンピュータに、
前記取得したカウンタ値を、前記第１領域に書き込むデータのうちの誤り検出に用いられる情報に含めることにより前記ブロックデータを生成する、
処理を実行させることを特徴とする、請求項１〜３のいずれか１項記載の書込検査プログラム。
【請求項５】
複数の領域を有する記憶装置に対してデータの入出力を行なう情報処理装置であって、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得するカウンタ管理部と、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加して生成したブロックデータを、前記第１領域に書き込む書込処理部と、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書込処理部による書き込み後に、当該第１領域内のブロックデータを読み出して、前記書き込んだブロックデータと比較し、比較結果が不一致の場合にエラーを通知する比較部と、
をそなえることを特徴とする、情報処理装置。
【請求項６】
複数の領域を有する記憶装置に対してデータの入出力を行なう情報処理装置における書込検査方法であって、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得し、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加してブロックデータを生成し、
生成したブロックデータを前記第１領域に書き込み、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書き込み後に、当該第１領域内のブロックデータを読み出し、
前記書き込んだブロックデータと前記読み出したブロックデータとを比較し、比較結果が不一致の場合にエラーを通知する、
ことを特徴とする、書込検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書込検査プログラム，情報処理装置，及び書込検査方法に関する。
【背景技術】
【０００２】
ＨＤＤ（Hard Disk Drive）等の記憶装置では、ホスト装置からのライト要求に係るデータが、低確率で、指示されたライトアドレスとは異なる別のアドレスに誤って書き込まれたり、ライトアドレスに書き込まれない（ライト抜けする）ことがある。ＨＤＤのライトアドレス間違いは、例えばＨＤＤがヘッドのシークに失敗した場合等に発生し、ライト抜けは、例えばＨＤＤのヘッドとディスクとの距離が開き磁力が低下した状態でライトが行なわれた場合等に発生し得る。
【０００３】
このように、ＨＤＤのライトアドレス間違い及びライト抜け（以下、これらをまとめて書込エラーともいう）は、ＨＤＤの状態に起因して発生することが多い。このため、ＨＤＤへのアクセスを制御するコントローラは、ライト要求に係るデータの書き込みをＨＤＤに指示した後にＨＤＤで発生した書込エラーを検出することが難しく、書込エラーをホスト装置へ通知することが困難な場合がある。
【０００４】
ＨＤＤにおける上記書込エラーを検出する手法としては、例えばＢＣＣ（Block Check Code）を用いる技術が知られている。ＢＣＣは、ＣＲＣ（Cyclic Redundancy Check）等によるデータの誤り検出に用いられる情報である。ＢＣＣには、コントローラがライト要求に係るデータに対して行なったＣＲＣの結果と、当該ライト要求に係るライトアドレスの情報とが含まれる。
【０００５】
例えば、コントローラは、ホスト装置からのリード要求に応じて、当該リード要求に係るリードアドレスと、ＨＤＤから読み出したブロックのＢＣＣに含まれるアドレスの情報とを比較する。これにより、コントローラは、比較結果が異なる場合に、ＨＤＤから読み出したブロックに間違ったアドレスのデータが書き込まれていること、つまり読み出したデータが本来は別のアドレスに書き込まれるデータであることを検出できる。
【０００６】
しかし、コントローラは、ＢＣＣを用いるだけでは、リード要求に係るデータが誤ってリードアドレスとは異なる別のアドレスに書き込まれていたり、当該データがライト抜けしていることを検出するのが困難な場合がある。これは、リードアドレスに対応するブロック内の情報が、本来は上書きされて消えているはずの古い情報であるものの、当該ブロックのＢＣＣ内のアドレスが正しいリードアドレスを示している可能性が高く、比較結果が一致してしまう場合があるためである。
【０００７】
一方、関連技術として、コントローラが、同じ記憶領域への直前のライト要求と今回のライト要求とを識別可能なカウンタ値等の時系列情報を生成する技術が知られている（例えば、特許文献１参照）。この技術では、コントローラが、生成した時系列情報を更新データとパリティデータとに付与してそれぞれ異なるディスクに書き込み、読出時に両者を比較することで、書込エラーの検出を可能とする。
【０００８】
また、他の関連技術として、コントローラが、複数のブロックごとに更新世代数等の更新状態値が記録される履歴ブロックを設け、これらをチェック対象の管理単位とする技術も知られている（例えば、特許文献２参照）。この技術では、コントローラが、同じ管理単位ごとに更新状態値を算出してメモリに記録するとともに、更新データと更新状態値とを含む管理単位全体をディスクにライトする。そして、その後、コントローラがディスクから更新状態値をリードしメモリに記憶した更新状態値と比較することで、ディスクのライト抜けを検出する。
【０００９】
このように、コントローラが、ディスクに記録されたカウンタ値（更新世代数）と、異なるディスク又はメモリに記録された比較用のカウンタ値とを比較し、両者が異なる場合に書込エラーを検出する技術が知られている。この技術によれば、コントローラは、リード要求に係るデータが誤ってリードアドレスとは異なる別のアドレスに書き込まれていたり、当該データがライト抜けしていることも検出することができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１０−１８２０８７号公報
【特許文献２】特開２００６−２５２５３０号公報
【特許文献３】特開２００７−１２２４７６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述した技術において、時系列情報や更新状態値は、ＨＤＤの記憶領域に書き込まれるため、これらのデータ量（サイズ）に応じて、ＨＤＤの利用可能なディスク容量、つまり業務データ（ユーザデータ）を格納可能なディスク容量が圧迫されることになる。特に、時系列情報を用いる技術のようにブロックごとに時系列情報が書き込まれる場合には、時系列情報のサイズの増加により利用可能なディスク容量が大きく減少する。
【００１２】
ここで、利用可能なディスク容量を確保するために時系列情報や更新状態値のサイズを最小限に抑えることを考える。なお、時系列情報や更新状態値としてカウンタ値が用いられるものとする。カウンタ値は、例えばｎビット（ｎは１以上の整数）の情報で表し、０〜ｍ（ただし、ｍ＝２ｎ−１）の範囲とすることができる。この場合、カウンタのサイズを小さくすると、以下に示すように、コントローラがライトアドレスの間違い又はライト抜けを検出することが困難になる場合がある。なお、以下、ライト抜けが発生する場合について説明するが、ライトアドレス間違いが発生する場合も同様である。
【００１３】
図６は、カウンタ値が２ビット（ｎ＝２）である場合のコントローラによるライト抜けの検出能力を示す図である。図６では、所定のブロックに“D0”の値が設定され、カウンタ値が０の初期状態において、当該所定のブロックに“D1”，“D2”，“D3”，“D4”の値を書き込むライト要求が連続して発行されるが、全ての書き込みでライト抜けが発生した場合を示す。
【００１４】
図６に示すように、ライト抜けが３回（“D1”〜“D3”）連続して発生した場合でも、コントローラは、リード時に、ディスクに記録された所定のブロックのカウンタ値と比較用のカウンタ値とを比較することで、ライト抜けを検出することができる。
しかし、ライト抜けが４回（“D1”〜“D4”）、つまり２ｎ回連続して発生した場合、比較用のカウンタ値が溢れてクリアされる（３から初期値の０に戻る）ため、所定のブロックのカウンタ値と比較用のカウンタ値とが同値になる。このとき、コントローラは、両カウンタ値が一致すると判断するため、ライト抜けが発生したと判断しない。なお、カウンタのサイズが小さいほど、カウンタの最大値が減少するため、ライト抜けが発生したときに２つのカウンタ値が同値になる可能性が高くなる。
【００１５】
このように、記憶装置の利用可能なディスク容量を確保するために、書込エラーの検査（書込検査）に用いるカウンタのサイズを小さくすると、コントローラが書込エラーを検出することが困難になる場合があり、書込検査の信頼性が低下するという課題がある。
１つの側面では、本発明は、記憶装置のデータの格納領域を確保しつつ、書込エラーの検査の信頼性を向上させることを目的とする。
【００１６】
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００１７】
本件の書込検査プログラムは、複数の領域を有する記憶装置に対してデータの入出力を行なうコンピュータに、以下の処理を実行させるものである。前記処理には、前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得する処理が含まれる。また、前記処理には、前記第１領域に書き込むデータに前記取得したカウンタ値を付加してブロックデータを生成し、生成したブロックデータを前記第１領域に書き込む処理が含まれる。さらに、前記処理には、前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書き込み後に、当該第１領域内のブロックデータを読み出す処理が含まれる。また、前記処理には、前記書き込んだブロックデータと前記読み出したブロックデータとを比較し、比較結果が不一致の場合にエラーを通知する処理が含まれる。
【発明の効果】
【００１８】
一実施形態によれば、記憶装置のデータの格納領域を確保しつつ、書込エラーの検査の信頼性を向上させることができる。
【図面の簡単な説明】
【００１９】
【図１】一実施形態に係る情報処理システムの構成例を示す図である。
【図２】図１に示す不揮発性メモリが保持するカウンタ値の一例を説明する図である。
【図３】図１に示すストレージ装置によるＨＤＤへのデータの書込処理の動作例を説明するフローチャートである。
【図４】図１に示すストレージ装置によるＨＤＤからのデータの読出処理の動作例を説明するフローチャートである。
【図５】図１に示すコントローラのハードウェア構成例を示す図である。
【図６】コントローラによるライト抜けの検出能力を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して実施の形態を説明する。
〔１〕一実施形態
〔１−１〕情報処理システムの説明
図１は、一実施形態に係る情報処理システム１の構成例を示す図である。
図１に示すように、情報処理システム１は、ストレージ装置２及びホスト装置３をそなえる。ホスト装置３は、ＰＣ（Personal Computer）やサーバ等の情報処理装置であり、ストレージ装置２に対してデータのライト又はリード要求（ライト又はリードコマンド）を発行する上位装置の一例である。ストレージ装置２は、コントローラ４，少なくとも１つのＨＤＤ５，及び不揮発性メモリ６をそなえる。
【００２１】
コントローラ４は、ホスト装置３からの要求に応じてＨＤＤ５に対してデータの入出力等のアクセスを行なうとともに、後述するメモリ２０，不揮発性メモリ６，その他各種資源の管理等の制御を行なう。コントローラ４としては、コントローラモジュール（Controller Module；ＣＭ）等の情報処理装置が挙げられる。なお、コントローラ４の説明は後述する。
【００２２】
ＨＤＤ５は、種々のデータやプログラム等を格納する記憶装置の一例である。本実施形態では、記憶装置としてＨＤＤ等の磁気ディスク装置を例に挙げるが、これに限定されるものではない。記憶装置として、データのライトアドレス間違いやライト抜けが生じ得る種々のデバイスが用いられてもよい。なお、図１では、１つのＨＤＤ５を図示しているが、複数のＨＤＤ５がデバイスアダプタ８ｂを介してコントローラ４と接続されてもよい。
【００２３】
ＨＤＤ５は、複数のブロック５１を含む記憶領域５０を有する。記憶領域５０は、種々のデータやプログラムを記憶するディスク領域である。ブロック（領域）５１には、データ５１ａ，ＢＣＣ５１ｂ，及びカウンタ値５１ｃが含まれる。なお、コントローラ４は、ＨＤＤ５に対して、ブロック５１のブロックサイズの単位でデータ入出力を行なう。
データ５１ａは、コントローラ４により書き込まれる、ホスト装置３からのライト要求に係るデータ（ユーザデータ）である。ＢＣＣ５１ｂは、ＣＲＣ等によるデータ５１ａの誤り検出に用いられる情報である。ＢＣＣ５１ｂには、コントローラ４がライト要求に係るデータ５１ａに対して行なったＣＲＣの結果と、当該ライト要求に係るライトアドレスの情報とが含まれる。
【００２４】
カウンタ値５１ｃは、同一ブロック５１内のデータ５１ａが更新された（ブロック５１にデータ５１ａが書き込まれた）回数を示す値である。なお、カウンタ値５１ｃは、ｎビット（ｎは１以上の整数）の情報で表し、０〜ｍ（ただし、ｍ＝２ｎ−１）の範囲とすることができる。
なお、ＢＣＣには、ベンダが独自に設定可能なベンダ領域があるため、コントローラ４は、ＢＣＣ５１ｂの当該ベンダ領域にカウンタ値５１ｃを設定してもよい。この場合、１つのブロック５１は、例えばデータ５１ａを５１２バイト，ＢＣＣ５１ｂ（ＢＣＣ５１ｂ及びカウンタ値５１ｃ）を８バイトとすると、５２０バイトのサイズになる。又は、データ５１ａの一部の領域をカウンタ値５１ｃの設定領域としてもよいし、カウンタ値５１ｃの設定領域が、データ５１ａ及びＢＣＣ５１ｂの領域の他に、新たにブロック５１に設けられてもよい。
【００２５】
不揮発性メモリ６は、ＨＤＤ５のブロック５１への書込回数を示すカウンタ値６ａをブロック５１ごとに保持する保持部の一例である。不揮発性メモリ６が保持する各カウンタ値６ａは、ＨＤＤ５の各ブロック５１に対応するｎビットの値である。不揮発性メモリ６としては、例えばＮＡＮＤ型フラッシュメモリやＭＲＡＭ（Magnetoresistive Random Access Memory）等の記憶素子，ＳＳＤ（Solid State Drive）等の半導体ドライブ装置等が挙げられる。なお、不揮発性メモリ６として、ＨＤＤ５等の磁気ディスク装置が用いられてもよいが、カウンタ値６ａはコントローラ４により書込エラーの比較用として用いられるため、信頼性の観点から上記記憶素子や半導体ドライブ装置等が用いられることが好ましい。
【００２６】
図２は、図１に示す不揮発性メモリ６が保持する複数のカウンタ値６ａの一例を説明する図である。図２に示すように、ＨＤＤ５が記憶領域５０としてＮ（Ｎは２以上の整数）個のブロック５１を有する場合、不揮発性メモリ６は、Ｎ個のブロック５１のカウンタ値５１ｃ（＃０〜＃Ｎ−１）に各々が対応するＮ個のカウンタ値６ａ（＃０〜＃Ｎ−１）を保持する。一例として、図２に示すように、不揮発性メモリ６は、＃０〜＃２，・・・，＃Ｎ−１の各ブロック５１に対応する、０（0b00），２（0b10），３（0b11），・・・，０（0b00）のカウンタ値を、ビットマップとして保持することができる。
【００２７】
〔１−２〕コントローラの説明
次に、図１を参照しながら、コントローラ４の詳細を説明する。図１に示すように、コントローラ４は、ＣＰＵ（Central Processing Unit）１０，メモリ２０，チャネルアダプタ７，並びにデバイスアダプタ８ａ及び８ｂをそなえる。
チャネルアダプタ７は、ホスト装置３と接続され、ホスト装置３とのインタフェース制御を行なうモジュールであり、ホスト装置３との間で通信やデータ転送を行なう。デバイスアダプタ８ａ及び８ｂは、それぞれ、ストレージ装置２に収容される不揮発性メモリ６及びＨＤＤ５とのインタフェース制御を行なうモジュールであり、不揮発性メモリ６及びＨＤＤ５との間で通信やデータ転送を行なう。
【００２８】
ＣＰＵ（処理部）１０は、コントローラ４内の各ブロック２０，７，８ａ，及び８ｂとそれぞれ接続され、種々の制御や演算を行なう処理装置（プロセッサ）の一例である。ＣＰＵ１０は、メモリ２０又は図示しないＲＯＭ（Read Only Memory）等の記録媒体に格納されたプログラムを実行することにより、種々の機能を実現することができる。
メモリ２０は、種々のデータやプログラムを一時的に格納するキャッシュメモリ等の記憶装置である。ＣＰＵ１０は、プログラムを実行する際に、メモリ２０にデータやプログラムを一時的に格納し展開する。例えば、メモリ２０は、図１に示すように、バッファ領域２１及び変数格納領域２２を含むことができる。なお、メモリ２０としては、例えばＲＡＭ等の揮発性メモリが挙げられる。
【００２９】
バッファ領域２１は、ホスト装置３からＨＤＤ５へ書き込まれるライトデータ、又は、ＨＤＤ５からホスト装置３へ読み出されるリードデータを含む、１以上のブロックデータ２１１を一時的に格納する領域である。ブロックデータ２１１には、ライト又はリード要求に係るデータ２１ａ，ＢＣＣ２１ｂ，カウンタ値２１ｃが含まれる。
変数格納領域２２は、コントローラ４の動作において用いられる種々の変数を格納する領域である。例えば変数格納領域２２には、バッファ領域２１からＨＤＤ５に書き込まれたブロックデータ２１１内のカウンタ値２１ｃを示す情報が設定されてもよい。
【００３０】
〔１−３〕処理部の説明
次に、ＣＰＵ１０が処理部として実現する各機能について説明する。
ＣＰＵ１０は、図１に示すように、コマンド処理部１１，カウンタ管理部１２，書込制御部１３，及び読出制御部１４を含む処理部の機能をそなえることができる。
コマンド処理部１１は、チャネルアダプタ７を介してホスト装置３との間で送受信されるリード／ライトコマンド及び当該コマンドへの応答に関する処理を行なう。例えばコマンド処理部１１は、ホスト装置３からライトコマンドを受信すると、当該ライトコマンドのうちの少なくともライトデータ（更新データ）及びライトアドレスを書込制御部１３に通知する。また、コマンド処理部１１は、書込制御部１３からライトコマンドに応じた書込処理の結果を通知されると、当該結果に基づきホスト装置３へ正常応答又はエラー応答を返す。さらに、コマンド処理部１１は、ホスト装置３からリードコマンドを受信すると、当該リードコマンドのうちの少なくともリードアドレス及びリード範囲を読出制御部１４に通知する。また、コマンド処理部１１は、読出制御部１４からリードコマンドに応じた読出処理の結果を通知されると、当該結果に基づきホスト装置３へリードデータ及び正常応答，又はエラー応答を返す。
【００３１】
カウンタ管理部１２は、デバイスアダプタ８ａを介して不揮発性メモリ６へのアクセスを行なう。具体的には、カウンタ管理部１２は、ＨＤＤ５の一のブロック５１に対するライト又はリードコマンドに応じて、不揮発性メモリ６から当該一のブロック５１に対応するカウンタ値６ａを取得する。例えばカウンタ管理部１２は、書込制御部１３又は読出制御部１４からの指示に応じて、ホスト装置３からのライトコマンドで指定されたブロック５１に対応するカウンタ値６ａを不揮発性メモリ６から読み出し、指示元へ通知する。
【００３２】
また、カウンタ管理部１２は、ＨＤＤ５の一のブロック５１に対するライトコマンドに応じて、不揮発性メモリ６内の当該カウンタ値６ａを変化させる。例えばカウンタ管理部１２は、ホスト装置３からのライトコマンドで指定されたブロック５１に対応する、不揮発性メモリ６内のカウンタ値６ａに１を加算する。なお、カウンタ値６ａに１を加算することにより当該カウンタ値６ａが所定値（例えば２ｎ）に達する場合、つまりカウンタ値６ａが溢れる場合、カウンタ管理部１２は、当該カウンタ値６ａをリセット（初期化）して初期値（例えば０（0b00））に戻す。なお、カウンタ管理部１２がカウンタ値６ａに１を加算する（変化させる）タイミングは、当該カウンタ値６ａの読出前及び読出後のいずれであってもよい。但し、カウンタ管理部１２が読出後に不揮発性メモリ６内のカウンタ値６ａに１を加算する場合、先に読み出したカウンタ値６ａにも１を加算する。
【００３３】
書込制御部１３は、ホスト装置３からのライトコマンドに応じてＨＤＤ５へのライトデータの書き込みを制御する。書込制御部１３は、例えばブロックデータ生成部１３ａ，書込処理部１３ｂ，カウンタ判定部１３ｃ，及びブロックデータ比較部１３ｄをそなえることができる。
ブロックデータ生成部１３ａは、ライトコマンドを受信した場合に、ブロックデータ２１１を生成して、メモリ２０のバッファ領域２１（ブロックバッファ）に一時的に格納する。具体的には、ブロックデータ生成部１３ａは、コマンド処理部１１から通知されたライトデータを、データ２１ａとしてバッファ領域２１（データバッファ）に格納する。また、ブロックデータ生成部１３ａは、ライトデータに対してＣＲＣを計算し、ＣＲＣの計算結果とコマンド処理部１１から通知されたライトアドレスとに基づきＢＣＣ２１ｂを生成して、バッファ領域２１（ＢＣＣバッファ）に格納する。なお、ＢＣＣ２１ｂの生成は、既知の種々の手法により実現することが可能であるため、詳細な説明を省略する。
【００３４】
さらに、ブロックデータ生成部１３ａは、ライトアドレスが示すブロック５１に対応する、不揮発性メモリ６内のカウンタ値６ａの取得をカウンタ管理部１２に指示する。そして、ブロックデータ生成部１３ａは、カウンタ管理部１２からカウンタ値６ａを通知されると、当該カウンタ値６ａをカウンタ値２１ｃとしてバッファ領域２１に格納する。このように、ブロックデータ生成部１３ａは、カウンタ値２１ｃがライトアドレスに対応するカウンタ値６ａと同値になるようにブロックデータ２１１を生成する。
【００３５】
書込処理部１３ｂは、ブロックデータ生成部１３ａからブロックデータ２１１の生成完了を通知されると、当該ブロックデータ２１１を、デバイスアダプタ８ｂを介してライトアドレスに書き込む。具体的には、書込処理部１３ｂは、ブロックデータ２１１（データ２１ａ，ＢＣＣ２１ｂ，カウンタ値２１ｃ）を、ライトアドレスが示すＨＤＤ５の対象ブロック（第１領域）５１（データ５１ａ，ＢＣＣ５１ｂ，カウンタ値５１ｃ）に書き込む。
【００３６】
カウンタ判定部１３ｃは、書込処理部１３ｂによるＨＤＤ５へのブロックデータ２１１の書き込みが完了すると、当該ブロックデータ２１１のカウンタ値２１ｃが初期値（例えば０）であるか否か、つまりカウンタ値２１ｃがリセットされたか否かを判定する。カウンタ値２１ｃが初期値ではない場合、カウンタ判定部１３ｃは、コマンド処理部１１へライトコマンドに対するＨＤＤ５への書込処理が正常に完了したことを通知する。すなわち、カウンタ値２１ｃが初期値でない場合、カウンタ値２１ｃの溢れは発生していない。従って、ブロックデータ２１１の書込エラーが発生していたとしても、コントローラ４は、該当ブロック５１からのリードデータの読み出しの際に、書込エラーを検出することができる（図６の“D1”，“D2”，“D3”参照）。
【００３７】
一方、カウンタ値２１ｃが初期値である場合、カウンタ判定部１３ｃは、ブロックデータ比較部１３ｄへブロックデータ２１１についての書込エラーの検出を指示する。すなわち、カウンタ値２１ｃが初期値であるということは、カウンタ値２１ｃの溢れが発生したことを意味する。従って、ブロックデータ２１１の書込エラーが発生していた場合、コントローラ４は、該当ブロック５１からのリードデータの読み出しの際に、書込エラーを検出することが困難になる（図６の“D4”参照）。そこで、カウンタ判定部１３ｃは、ブロックデータ２１１の書き込みを行なった直後に、当該ブロックデータ２１１が正常に書込対象のブロック（第１領域）５１に書き込まれたか否かを、ブロックデータ比較部１３ｄに検査させるのである。
【００３８】
なお、カウンタ判定部１３ｃは、上記判定に用いるカウンタ値２１ｃを、バッファ領域２１，変数格納領域２２，又は不揮発性メモリ６から取得することができる。
ブロックデータ比較部（第１比較部）１３ｄは、カウンタ判定部１３ｃからの指示に応じて、ライトアドレスが示すＨＤＤ５のブロック５１内の情報を読み出す。そして、ブロックデータ比較部１３ｄは、読み出した情報をブロックデータ２１１（リードブロックデータ）としてバッファ領域２１（ブロックバッファ）に格納する。なお、ブロックデータ比較部１３ｄは、バッファ領域２１において、ブロック５１から読み出すリードブロックデータを、書込処理部１３ｂにより書込対象のブロック５１に書き込まれたブロックデータ２１１（ライトブロックデータ）とは異なる領域に格納する。
【００３９】
このときブロックデータ比較部１３ｄが読み出したリードブロックデータは、書込エラーが発生していなければ、書込処理部１３ｂにより書き込まれたブロックデータ２１１（ライトブロックデータ）と一致するはずである。そこで、ブロックデータ比較部１３ｄは、バッファ領域２１に格納されたライトブロックデータとリードブロックデータとを比較し、両者が一致するか否かを判定する。つまり、ブロックデータ比較部１３ｄは、カウンタ判定部１３ｃからの指示に応じて、書込処理部１３ｂによるデータの書き込み後に同一のブロック５１からデータを読み出して比較するリードアフターライト（Read After Write）を行なうのである。
【００４０】
なお、ブロックデータ比較部１３ｄによる上記判定は、少なくとも一部のデータの比較により行なわれればよい。例えば、比較する少なくとも一部のデータとして、ライト／リードブロックデータ内の各データ２１ａ，各ＢＣＣ２１ｂ，或いは各カウンタ値２１ｃのいずれか、又はこれらの組み合わせが用いられてもよい。さらに、比較する少なくとも一部のデータとして、データ２１ａ及びＢＣＣ２１ｂ内のＣＲＣが用いられてもよい。
【００４１】
ライトブロックデータとリードブロックデータとが一致する場合、ブロックデータ比較部１３ｄは、ライトコマンドに対するＨＤＤ５への書込処理が正常に完了したことをコマンド処理部１１へ通知する。一方、ライトブロックデータとリードブロックデータとが一致しない場合、ブロックデータ比較部１３ｄは、ライトコマンドに対するＨＤＤ５への書込処理において書込エラーが発生したことをコマンド処理部１１へ通知する。
【００４２】
上述のように、カウンタ値５１ｃは、ＨＤＤ５の記憶領域５０に書き込まれるため、カウンタ値５１ｃのデータ量に応じて、ＨＤＤ５の利用可能（ユーザデータを格納可能）なディスク容量、つまり全ブロック５１におけるデータ５１ａの格納領域が圧迫される。特に、図１に示すように、ブロック５１単位で書込エラーを検出するためにブロック５１ごとにカウンタ値５１ｃが書き込まれる場合には、カウンタのサイズの増加により利用可能なディスク容量が大きく減少することになる。
【００４３】
一方、ＨＤＤ５の利用可能なディスク容量を確保するために、カウンタのサイズを小さくすると、図６を参照して説明したように、コントローラ４が書込エラーを検出することが困難になる場合があり、書込検査の信頼性が低下してしまう。
これに対し、一実施形態に係る書込制御部１３は、書込対象のブロック５１に対応するカウンタ値２１ｃが所定条件を満たしたとき、具体的には当該カウンタ値２１ｃがリセットされたとき、書込対象のブロック（第１領域）５１へ書き込み及び読み出しを行なう。そして、書込制御部１３は、書き込みを行なったブロックデータ２１１と、書き込み後に読み出したブロック５１内の情報とを比較し、両者が不一致であればコマンド処理部１１を介してホスト装置３へエラー応答（エラー通知）を行なう。
【００４４】
これにより、書込制御部１３は、データ量（ｎ）の小さいカウンタを用いた場合でも、連続する書込エラーを検出することができる。このように、書込制御部１３によれば、ＨＤＤ５のユーザデータ（データ５１ａ）の格納領域を確保しつつ、書込エラーの検査の信頼性を向上させることができる。
また、カウンタのサイズを小さくしても書込エラーの検査の信頼性を確保できるため、カウンタのサイズを小さくして、ブロック５１の空き領域にカウンタ値５１ｃを設定することができる。例えばコントローラ４は、カウンタ値２１ｃを、例えばＢＣＣ２１ｂのベンダ領域、つまり書込対象のブロック５１に書き込まれるデータのうちの誤り検出に用いられる情報（ＢＣＣ２１ｂ）に含めることで、ブロックデータ２１１を生成することができる。これにより、データ５１ａの格納領域を大きくしたり、記憶領域５０により多くのブロック５１を設けることができ、利用可能なディスク容量をさらに増加させることができる。
【００４５】
さらに、カウンタのサイズを小さくしても書込エラーの検査の信頼性を確保できるため、複数のカウンタ値６ａを格納する不揮発性メモリ６の記憶領域を小さくすることができる。これにより、回路規模を縮小できるとともに製造コストの軽減を図ることができる。
なお、書込対象のブロック５１に対応するカウンタ値２１ｃがリセットされたときに限らず、ブロックデータ比較部１３ｄは、ＨＤＤ５への書き込みの都度、リードアフターライトを行なうことも考えられる。しかしながら、リードアフターライトでは、単純な書き込みの処理時間に加えて、リードのための磁気ヘッドのシーク処理，データの読み込み，ライトデータとリードデータとの比較等の処理時間が余計にかかる。従って、ＨＤＤ５への書き込みの都度、リードアフターライトが行なわれる場合には、ストレージ装置２の性能低下が著しくなる。この点、一実施形態に係るブロックデータ比較部１３ｄによれば、リードアフターライトを最小限に留めることができるため、ストレージ装置２の性能低下を抑止できる。
【００４６】
次に、読出制御部１４について説明する。
読出制御部１４は、ホスト装置３からのリードコマンドに応じてＨＤＤ５からのリードデータの読み出しを制御するものであり、例えば読出処理部１４ａ，ＢＣＣ判定部１４ｂ，及びカウンタ判定部１４ｃをそなえることができる。
読出処理部１４ａは、リードコマンドを受信した場合に、ＨＤＤ５の読出対象のブロック（第２領域）５１内の情報を読み出し、バッファ領域２１へ一時的に格納する。具体的には、読出処理部１４ａは、コマンド処理部１１から通知されたリードアドレス及びリード範囲に基づいて読出対象のブロック５１を特定する。そして、読出処理部１４ａは、特定した読出対象のブロック５１からデータ５１ａ，ＢＣＣ５１ｂ，カウンタ値５１ｃを読み出し、ブロックデータ２１１（リードブロックデータ）としてバッファ領域２１（ブロックバッファ）に格納する。
【００４７】
ＢＣＣ判定部１４ｂは、読出処理部１４ａがバッファ領域２１に格納したリードブロックデータのＢＣＣ検査を行なう。具体的には、ＢＣＣ判定部１４ｂは、コマンド処理部１１から通知されるリードコマンドに係るリードアドレスと、リードブロックデータのＢＣＣ２１ｂに含まれるアドレスの情報とを比較する。比較結果が異なる場合、ＢＣＣ判定部１４ｂは、読出対象のブロック５１に、同一ブロック５１への直前の書き込みにおいて書込エラーが発生していたことを検出する。これにより、ＢＣＣ判定部１４ｂは、ＨＤＤ５から読み出したブロック５１に間違ったアドレスのデータ５１ａが書き込まれていること、つまり読み出したデータ５１ａが本来は別のアドレスに書き込まれているはずのデータであることを検出する。そして、ＢＣＣ判定部１４ｂは、リードコマンドに対するＨＤＤ５への読出処理において、読出対象のブロック５１での書込エラーを検出したことをコマンド処理部１１へ通知する。
【００４８】
一方、比較結果が一致する場合、ＢＣＣ判定部１４ｂは、ＢＣＣ検査による書込エラーの発生は検出されないと判断し、カウンタ値による書込エラーの検査をカウンタ判定部１４ｃに指示する。上述のように、ＢＣＣ検査では、リードコマンドで要求されたデータが誤ってリードアドレスとは異なる別のアドレスに書き込まれていたり、当該データがライト抜けしていることを検出するのが困難な場合がある。そこで、ＢＣＣ判定部１４ｂは、比較結果が一致する場合、リードブロックデータがリードコマンドで要求された正しいデータであるか否かを、カウンタ判定部１４ｃに検査させるのである。
【００４９】
カウンタ判定部（第２比較部）１４ｃは、ＢＣＣ判定部１４ｂから指示を受けると、リードアドレスが示すブロック（第２領域）５１に対応する、不揮発性メモリ６内のカウンタ値６ａの取得をカウンタ管理部１２に指示する。そして、カウンタ判定部１４ｃは、カウンタ管理部１２からカウンタ値６ａを通知されると、当該カウンタ値６ａと、バッファ領域２１に格納されたリードブロックデータ内のカウンタ値２１ｃとを比較する。
【００５０】
比較結果が一致する場合、カウンタ判定部１４ｃは、リードコマンドに対するＨＤＤ５への読出処理において、リードコマンドに対するＨＤＤ５への読出処理が正常に完了したことをコマンド処理部１１へ通知する。
一方、比較結果が異なる場合、カウンタ判定部１４ｃは、読出対象のブロック５１に、同一ブロック５１への直前の書き込みにおいて書込エラーが発生していたことを検出する。そして、カウンタ判定部１４ｃは、リードコマンドに対するＨＤＤ５への読出処理において、読出対象のブロック５１での書込エラーを検出したことをコマンド処理部１１へ通知する。
【００５１】
なお、読出制御部１４は、リードコマンドへの応答をコマンド処理部１１へ通知する際に、バッファ領域２１に格納したブロックデータ２１１（リードブロックデータ）の少なくとも一部のデータを併せてコマンド処理部１１へ通知する。なお、読出制御部１４は、リードコマンドへの応答が書込エラーを検出したことを示す応答（エラー応答）である場合には、リードブロックデータをコマンド処理部１１へ通知しなくてもよい。
【００５２】
ここで、ストレージ装置２がＨＤＤ５への書き込み及び読み出しを行なう際にアクセスするブロック５１の数と、上述した関連技術において同様の処理でコントローラがアクセスするブロックの数とを比較してみる。なお、関連技術として、コントローラが、複数のブロックごとに更新状態値が記録される履歴ブロックを設け、これらをチェック対象の管理単位とする技術を例に挙げる。
【００５３】
関連技術では、更新状態値として、タイムスタンプ，更新世代数，管理単位全体のチェックコード等が用いられる。なお、チェックコードが用いられる場合には、コントローラは、管理単位全体のライト抜けを検出することが困難である。以下、一実施形態に係るストレージ装置２と条件を合わすため、関連技術の更新状態値として更新世代数が用いられるものとする。
【００５４】
ストレージ装置２のコントローラ４及び関連技術のコントローラは、それぞれ、ＨＤＤ５に対するリード時及びライト時に、ディスク内の以下のブロックへアクセスを行なう。なお、以下の対比において、括弧内の“リード”及び“ライト”は、ブロックへのアクセス形態を表す。
・リード時にアクセスされるディスク内のブロック
関連技術：読出対象のブロック（リード）＋更新状態値格納ブロック（リード）
ストレージ装置２：読出対象のブロック５１（リード）
・ライト時にアクセスされるディスク内のブロック
関連技術：書込対象のブロック（ライト）＋更新状態値格納ブロック（ライト）
ストレージ装置２
（カウンタ値２１ｃが０の場合）：書込対象のブロック５１（ライト）＋書込対象のブロック５１（リード）
（カウンタ値２１ｃが０以外の場合）：書込対象のブロック５１（ライト）
このように、リード時及びライト時のいずれの場合においても、ストレージ装置２によれば、関連技術よりもブロックへのアクセス頻度を低下させることができる。なお、ストレージ装置２は、ライト時（カウンタ値２１ｃが０の場合）に、リードアフターライトにより書込対象のブロック５１へのライト及びリードを行なうため、アクセスするブロック数は関連技術と同程度となる。しかし、カウンタ値２１ｃが０になる確率は、カウンタ値２１ｃが２ビット（ｎ＝２）の場合で１／４，カウンタ値２１ｃが３ビット（ｎ＝３）の場合で１／８，・・・と、常に２つのブロックへライトを行なう関連技術と比べて限定的である。
【００５５】
以上のように、一実施形態に係るストレージ装置２によれば、ＨＤＤ５へ書き込み及び読み出しを行なう際のブロック５１へのアクセス頻度を低下させることができ、上記関連技術よりもスループットを向上させることができる。
〔１−４〕情報処理システムの動作例
次に、上述の如く構成された情報処理システム１の動作例を、図３及び図４を参照して説明する。図３は、図１に示すストレージ装置２によるＨＤＤ５へのデータの書込処理の動作例を説明するフローチャートであり、図４は、図１に示すストレージ装置２によるＨＤＤ５からのデータの読出処理の動作例を説明するフローチャートである。
【００５６】
〔１−４−１〕書込処理の動作例
はじめに、図３を参照して書込処理の動作を説明する。
図３に示すように、ホスト装置３からライトコマンドが発行され、ストレージ装置２により受信されると（ステップＳ１）、コマンド処理部１１により、ライトコマンドに係るライトデータ及びライトアドレスがブロックデータ生成部１３ａに通知される。
【００５７】
ブロックデータ生成部１３ａでは、ライトデータがデータ２１ａとしてバッファ領域２１（データバッファ）に格納される（ステップＳ２）。また、ブロックデータ生成部１３ａにより、ライトデータ及びライトアドレスに基づいてライトアドレスを含むＢＣＣ２１ｂが生成され（ステップＳ３）、生成されたＢＣＣ２１ｂがバッファ領域２１（ＢＣＣバッファ）に格納される（ステップＳ４）。
【００５８】
次いで、ブロックデータ生成部１３ａにより、ライトアドレスが示す書込対象のブロック５１に対応する、不揮発性メモリ６内のカウンタ値６ａの取得が、カウンタ管理部１２に指示される。そして、カウンタ管理部１２により、カウンタ値６ａが不揮発性メモリ６からリードされて（ステップＳ５）、１が加算され（ステップＳ６）、ブロックデータ生成部１３ａに出力される。ブロックデータ生成部１３ａでは、カウンタ管理部１２から受け取ったカウンタ値６ａがカウンタ値２１ｃとしてバッファ領域２１に格納される（ステップＳ７）。
【００５９】
また、カウンタ管理部１２により、書込対象のブロック５１に対応する、不揮発性メモリ６内のカウンタ値６ａに１が加算されて更新される（ステップＳ８）。なお、ステップＳ６及びＳ８のいずれにおいても、１が加算されることでカウンタ値６ａが所定値（２ｎ）に達する場合には、カウンタ管理部１２により、当該カウンタ値６ａがリセットされて、初期値に戻される。
【００６０】
次に、書込処理部１３ｂにより、ブロックデータ生成部１３ａによって生成されたバッファ領域２１（ブロックバッファ）内のブロックデータ２１１（ライトブロックデータ）が、ＨＤＤ５のライトアドレスへ書き込まれる（ステップＳ９）。
ＨＤＤ５への書き込みが行なわれると、カウンタ判定部１３ｃにより、書込対象のブロック５１へ書き込まれたカウンタ値２１ｃが初期値（例えば０）であるか否かが判定される（ステップＳ１０）。カウンタ値２１ｃが初期値ではない場合（ステップＳ１０のＮｏルート）、カウンタ判定部１３ｃにより、書き込みが正常に行なわれたことがコマンド処理部１１へ通知される。そして、コマンド処理部１１により、ホスト装置３へ正常応答が返され（ステップＳ１４）、処理が終了する。
【００６１】
一方、カウンタ値２１ｃが初期値である場合（ステップＳ１０のＹｅｓルート）、ブロックデータ比較部１３ｄにより、ライトアドレスが示すＨＤＤ５のブロック５１内の情報が読み出される（ステップＳ１１）。読み出されたブロック５１内の情報は、ブロックデータ比較部１３ｄにより、ブロックデータ２１１（リードブロックデータ）としてバッファ領域２１に格納される。
【００６２】
そして、ブロックデータ比較部１３ｄにより、バッファ領域２１のライトブロックデータとリードブロックデータとが比較され（ステップＳ１２）、両者が一致するか否かが判定される（ステップＳ１３）。両者が一致する場合（ステップＳ１３のＹｅｓルート）、ブロックデータ比較部１３ｄにより、書き込みが正常に行なわれたことがコマンド処理部１１へ通知され、コマンド処理部１１により、ホスト装置３へ正常応答が返され（ステップＳ１４）、処理が終了する。
【００６３】
一方、両者が一致しない場合（ステップＳ１３のＮｏルート）、ブロックデータ比較部１３ｄにより、書込エラーが発生したことがコマンド処理部１１へ通知される。そして、コマンド処理部１１により、ホスト装置３へエラー応答が返され（ステップＳ１５）、処理が終了する。
なお、図３において、ステップＳ８の処理は、ステップＳ４及びステップＳ５の処理の間に実行されてもよい。この場合、ステップＳ６の処理を省略することができる。
【００６４】
以上のように、一実施形態に係るストレージ装置２によれば、コントローラ４が、カウンタ値２１ｃが所定値になったときに限り、ＨＤＤ５への書き込み後に、リードアフターライトを行なう。すなわち、コントローラ４は、リードアフターライトにおいて、ライトアドレスと同一のアドレスから読み出したリードブロックデータを、書き込みを行なったライトブロックデータと比較する。比較の結果、データが不一致の場合、コントローラ４は、ライトアドレス間違い又はライト抜けが発生したと判断する。
【００６５】
これにより、コントローラ４は、データ量（ｎ）の小さいカウンタを用いた場合でも、カウンタ値５１ｃのリセットを跨いで連続して発生した書込エラーを検出することができる。このように、コントローラ４によれば、ＨＤＤ５のユーザデータ（データ５１ａ）の格納領域を確保しつつ、書込エラーの検査の信頼性を向上させることができる。
〔１−４−２〕読出処理の動作例
次に、図４を参照して読出処理の動作を説明する。
【００６６】
図４に示すように、ホスト装置３からリードコマンドが発行され、ストレージ装置２により受信されると（ステップＳ２１）、コマンド処理部１１により、リードコマンドに係るリードアドレス及びリード範囲が読出処理部１４ａに通知される。
読出処理部１４ａでは、リードアドレス及びリード範囲に基づいてＨＤＤ５の読出対象のブロック５１が特定され、読出対象のブロック５１内の情報が読み出される（ステップＳ２２）。読み出された読出対象のブロック５１内の情報は、読出処理部１４ａにより、ブロックデータ２１１（リードブロックデータ）としてバッファ領域２１（ブロックバッファ）に格納される。
【００６７】
次いで、ＢＣＣ判定部１４ｂにより、リードアドレスとバッファ領域２１に格納されたリードブロックデータ内のＢＣＣ２１ｂとに基づいてＢＣＣ検査が行なわれる（ステップＳ２３）。ＢＣＣエラーが検出されると（ステップＳ２４，及びステップＳ２４のＹｅｓルート）、ＢＣＣ判定部１４ｂにより、読出対象のブロック５１への直前の書き込みにおいて書込エラーが発生していたことがコマンド処理部１１へ通知される。そして、コマンド処理部１１により、ホスト装置３へエラー応答が返され（ステップＳ２９）、処理が終了する。
【００６８】
一方、ステップＳ２４において、ＢＣＣエラーが検出されない場合（ステップＳ２４のＮｏルート）、カウンタ判定部１４ｃにより、読出対象のブロック５１に対応する、不揮発性メモリ６内のカウンタ値６ａの取得が、カウンタ管理部１２に指示される。そして、カウンタ管理部１２により、カウンタ値６ａが不揮発性メモリ６からリードされ（ステップＳ２５）、カウンタ判定部１４ｃに出力される。カウンタ判定部１４ｃでは、リードブロックデータ内のカウンタ値２１ｃと、カウンタ管理部１２から受け取ったカウンタ値６ａとが比較され（ステップＳ２６）、両者が一致するか否かが判定される（ステップＳ２７）。
【００６９】
カウンタ値２１ｃとカウンタ値６ａとが一致する場合（ステップＳ２７のＹｅｓルート）、カウンタ判定部１４ｃにより、リードブロックデータ及び読み出しが正常に行なわれたことがコマンド処理部１１へ通知される。そして、コマンド処理部１１により、ホスト装置３へリードブロックデータ及び正常応答が返され（ステップＳ２８）、処理が終了する。
【００７０】
一方、カウンタ値２１ｃとカウンタ値６ａとが一致しない場合（ステップＳ２７のＮｏルート）、カウンタ判定部１４ｃにより、読出対象のブロック５１への直前の書き込みにおいて書込エラーが発生していたことがコマンド処理部１１へ通知される。そして、コマンド処理部１１により、ホスト装置３へエラー応答が返され（ステップＳ２９）、処理が終了する。
【００７１】
以上のように、一実施形態の一例としてのストレージ装置２による、ＨＤＤ５へのデータの書込処理及び読出処理が実行される。
〔２〕ハードウェア構成例
次に、図５を参照して、図１に示すコントローラ４のハードウェア構成について説明する。図５は、図１に示すコントローラ４のハードウェア構成例を示す図である。
【００７２】
図５に示すように、コントローラ４は、図１において既述のＣＰＵ１０，メモリ２０，チャネルアダプタ７，並びにデバイスアダプタ８ａ及び８ｂをそなえるとともに、入出力部４１，記録媒体４２ａ，及び読取部４３をさらにそなえることができる。
入出力部４１は、例えばマウスやキーボード等の入力装置、及びディスプレイやプリンタ等の出力装置の少なくとも一方を含んでよい。入出力部４１は、入力装置によりコントローラ４のオペレータ（管理者）等の操作による動作命令を受け付ける一方、コントローラ４による動作結果を出力装置に表示（出力）することができる。
【００７３】
記録媒体４２ａは、例えばフラッシュメモリやＲＯＭ等の記憶装置であり、種々のデータやプログラムを記録することができる。読取部４３は、コンピュータ読取可能な記録媒体４２ｂに記録されたデータやプログラムを読み出す装置である。記録媒体４２ａ及び４２ｂの少なくとも一方には、本実施形態に係るコントローラ４の各種機能の全部もしくは一部を実現する書込検査プログラムが格納されてもよい。例えば、ＣＰＵ１０は、記録媒体４２ａから読み出したプログラム、又は、読取部４３を介して記録媒体４２ｂから読み出したプログラムを、メモリ２０等の記憶装置に展開して実行することができる。これにより、コンピュータ（ＣＰＵ１０，情報処理装置，各種端末を含む）は、上述したコントローラ４の機能を実現することができる。
【００７４】
なお、記録媒体４２ｂとしては、例えばフレキシブルディスク，ＣＤ（Compact Disc），ＤＶＤ（Digital Versatile Disc），ブルーレイディスク等の光ディスクや、ＵＳＢ（Universal Serial Bus）メモリやＳＤカード等のフラッシュメモリが挙げられる。なお、ＣＤとしては、ＣＤ−ＲＯＭ，ＣＤ−Ｒ（CD-Recordable），ＣＤ−ＲＷ（CD-Rewritable）等が挙げられる。また、ＤＶＤとしては、ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷ等が挙げられる。
【００７５】
なお、上述した各ブロック１０，２０，７，８ａ，８ｂ，４１〜４３間はバスで相互に通信可能に接続される。また、コントローラ４の上述したハードウェア構成は例示である。従って、コントローラ４内でのハードウェアの増減（例えば任意のブロックの省略）や分割、任意の組み合わせでの統合等は適宜行なわれてもよい。なお、チャネルアダプタ７，デバイスアダプタ８ａ及び８ｂは、コントローラ４の外部にそなえられてもよい。
【００７６】
〔３〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
例えば、一実施形態において、コントローラ４は、ＨＤＤ５へのデータの書込処理において、バッファ領域２１に生成するブロックデータ２１１にＢＣＣ２１ｂを含めるものとして説明したが、これに限定されるものではなく、ＢＣＣ２１ｂを省略してもよい。この場合、ＨＤＤ５のブロック５１には、データ５１ａ及びカウンタ値５１ｃが含まれることになる。また、ＢＣＣ２１ｂを省略する場合には、コントローラ４（ＣＰＵ１０）は、ＢＣＣ判定部１４ｂを省略することができる。さらに、ＢＣＣ２１ｂを省略する場合には、図３に示すステップＳ３及びＳ４の処理，並びに図４に示すステップＳ２３及びＳ２４の処理を省略することができる。
【００７７】
また、一実施形態において、ストレージ装置２の動作を１つのＨＤＤ５に着目して説明したが、複数のＨＤＤ５がストレージ装置２にそなえられる場合も同様である。この場合、不揮発性メモリ６は、ＨＤＤ５ごとに、複数のブロック５１の各々に対応するカウンタ値６ａを保持すればよい。
また、一実施形態において、コントローラ４は、ストレージ装置２にそなえられるものとして説明したが、これに限定されるものではない。例えば、コントローラ４は、個々のＨＤＤ５内にそなえられてもよいし、ホスト装置３にそなえられてもよい。
【００７８】
さらに、図５を参照して、一実施形態に係るコントローラ４は、入出力部４１，記録媒体４２ｂ，及び読取部４３をそなえるものとして説明したが、これに限定されるものではない。例えば、入出力部４１，記録媒体４２ｂ，及び読取部４３の少なくとも一つは、ホスト装置３又は他の装置にそなえられてもよい。この場合、書込検査プログラムは、ホスト装置３又は他の装置から有線又は無線を介してコントローラ４に転送され、ＣＰＵ１０は、転送された書込検査プログラムをメモリ２０に展開して実行してもよい。
【００７９】
また、一実施形態に係るコントローラ４は、複数のＨＤＤ５を用いた種々のＲＡＩＤ（Redundant Array of Inexpensive Disks）構成のストレージに対しても同様の制御を行なうことができる。
なお、一実施形態に係るコントローラ４は、カウンタ値６ａを変化させる際に１を加算するものとして説明したが、これに限定されるものではなく、例えば１を減算するようにしてもよい。この場合、初期値を２ｎとして、カウンタ値６ａをリセットする所定値を０とすればよい。
【００８０】
〔４〕付記
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
複数の領域を有する記憶装置に対してデータの入出力を行なうコンピュータに、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得し、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加してブロックデータを生成し、
生成したブロックデータを前記第１領域に書き込み、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書き込み後に、当該第１領域内のブロックデータを読み出し、
前記書き込んだブロックデータと前記読み出したブロックデータとを比較し、比較結果が不一致の場合にエラーを通知する、
処理を実行させることを特徴とする、書込検査プログラム。
【００８１】
（付記２）
前記コンピュータに、
前記保持部に対して、前記第１領域に対応するカウンタ値を変化させる際に、当該カウンタ値を変化させると所定値に達する場合、当該カウンタ値を初期化する、
処理を実行させ、
前記所定条件は、前記カウンタ値が初期化されたことを含む、
ことを特徴とする、付記１記載の書込検査プログラム。
【００８２】
（付記３）
前記コンピュータに、
前記保持部から、読出対象の第２領域に対応するカウンタ値を取得し、
前記第２領域から読み出したブロックデータに含まれるカウンタ値と前記取得したカウンタ値とを比較し、比較結果が不一致の場合にエラーを通知する、
処理を実行させることを特徴とする、付記１又は付記２記載の書込検査プログラム。
【００８３】
（付記４）
前記コンピュータに、
前記取得したカウンタ値を、前記第１領域に書き込むデータのうちの誤り検出に用いられる情報に含めることにより前記ブロックデータを生成する、
処理を実行させることを特徴とする、付記１〜３のいずれか１項記載の書込検査プログラム。
【００８４】
（付記５）
複数の領域を有する記憶装置に対してデータの入出力を行なう情報処理装置であって、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得するカウンタ管理部と、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加して生成したブロックデータを、前記第１領域に書き込む書込処理部と、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書込処理部による書き込み後に、当該第１領域内のブロックデータを読み出して、前記書き込んだブロックデータと比較し、比較結果が不一致の場合にエラーを通知する第１比較部と、
をそなえることを特徴とする、情報処理装置。
【００８５】
（付記６）
前記カウンタ管理部は、前記保持部に対して、前記第１領域に対応するカウンタ値を変化させる際に、当該カウンタ値を変化させると所定値に達する場合、当該カウンタ値を初期化し、
前記所定条件は、前記カウンタ値が初期化されたことを含む、
ことを特徴とする、付記５記載の情報処理装置。
【００８６】
（付記７）
前記カウンタ管理部は、前記保持部から、読出対象の第２領域に対応するカウンタ値を取得し、
前記第２領域から読み出したブロックデータに含まれるカウンタ値と前記取得したカウンタ値とを比較し、比較結果が不一致の場合にエラーを通知する第２比較部、をさらにそなえる、
ことを特徴とする、付記５又は付記６記載の情報処理装置。
【００８７】
（付記８）
前記書込処理部は、前記取得したカウンタ値を、前記第１領域に書き込むデータのうちの誤り検出に用いられる情報に含めることにより前記ブロックデータを生成する、
ことを特徴とする、付記５〜７のいずれか１項記載の情報処理装置。
（付記９）
複数の領域を有する記憶装置に対してデータの入出力を行なう情報処理装置における書込検査方法であって、
前記記憶装置の前記領域への書込回数を示すカウンタ値を前記領域ごとに保持する保持部に対して、書込対象の第１領域に対応するカウンタ値を変化させるとともに、前記保持部から当該カウンタ値を取得し、
前記第１領域に書き込むデータに前記取得したカウンタ値を付加してブロックデータを生成し、
生成したブロックデータを前記第１領域に書き込み、
前記第１領域に対応するカウンタ値が所定条件を満たしたとき、前記書き込み後に、当該第１領域内のブロックデータを読み出し、
前記書き込んだブロックデータと前記読み出したブロックデータとを比較し、比較結果が不一致の場合にエラーを通知する、
ことを特徴とする、書込検査方法。
【００８８】
（付記１０）
前記保持部に対して、前記第１領域に対応するカウンタ値を変化させる際に、当該カウンタ値を変化させると所定値に達する場合、当該カウンタ値を初期化し、
前記所定条件は、前記カウンタ値が初期化されたことを含む、
ことを特徴とする、付記９記載の書込検査方法。
【００８９】
（付記１１）
前記保持部から、読出対象の第２領域に対応するカウンタ値を取得し、
前記第２領域から読み出したブロックデータに含まれるカウンタ値と前記取得したカウンタ値とを比較し、比較結果が不一致の場合にエラーを通知する、
ことを特徴とする、付記９又は付記１０記載の書込検査方法。
【００９０】
（付記１２）
前記取得したカウンタ値を、前記第１領域に書き込むデータのうちの誤り検出に用いられる情報に含めることにより前記ブロックデータを生成する、
ことを特徴とする、付記９〜１１のいずれか１項記載の書込検査方法。
【符号の説明】
【００９１】
１    情報処理システム
２    ストレージ装置
３    ホスト装置（上位装置）
４    コントローラ（情報処理装置）
５    ＨＤＤ（記憶装置）
６    不揮発性メモリ（保持部）
６ａ    カウンタ値
７    チャネルアダプタ
８ａ，８ｂ    デバイスアダプタ
１０    ＣＰＵ（処理部）
１１    コマンド処理部
１２    カウンタ管理部
１３    書込制御部
１３ａ    ブロックデータ生成部
１３ｂ    書込処理部
１３ｃ    カウンタ判定部
１３ｄ    ブロックデータ比較部（第１比較部）
１４    読出制御部
１４ａ    読出処理部
１４ｂ    ＢＣＣ判定部
１４ｃ    カウンタ判定部（第２比較部）
２０    メモリ
２１    バッファ領域
２１ａ，５１ａ    データ
２１ｂ，５１ｂ    ＢＣＣ
２１ｃ，５１ｃ    カウンタ値
２２    変数格納領域
４１    入出力部
４２ａ，４２ｂ    記録媒体
４３    読取部
５０    記憶領域
５１    ブロック（領域）
２１１    ブロックデータ
【図１】
2015138372.tif 000003
【図２】
2015138372.tif 000004
【図３】
2015138372.tif 000005
【図４】
2015138372.tif 000006
【図５】
2015138372.tif 000007
【図６】
2015138372.tif 000008