(57)【要約】【課題】データ異常時のリカバリ性能を改善できる。【解決手段】ストレージ制御装置１は、フィールド４ａ，４ｂ，４ｃからなる可変長データフォーマット４のデータを、固定長データフォーマット５のデータに変換して、変換した固定長データフォーマット５のデータを記憶装置３に記憶させる。ストレージ制御装置１は、データ蓄積用メモリ１ａと、書込部１ｂと、検証情報付加部１ｃとを含む。書込部１ｂは、可変長データフォーマット４のデータを、データ蓄積用メモリ１ａの分割領域６に書き込む。検証情報付加部１ｃは、１以上の分割領域６に書き込まれる可変長データフォーマット４のフィールド４ａに検証情報８を付加する。これにより、ストレージ制御装置１は、分割領域６単位でのデータ異常の検証をおこなうことができる。【選択図】図１
2015106372.tif 000002
【特許請求の範囲】
【請求項１】
所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置であって、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込む書込部と、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する検証情報付加部と、
を備えることを特徴とするストレージ制御装置。
【請求項２】
前記書込部は、前記１以上の分割領域のうちの先頭または末尾に位置する分割領域のデータが前記固定長データフォーマットのデータの一部となる場合に、前記固定長データフォーマットのデータを前記外部装置から読み出して前記固定長データフォーマットのデータの一部となるデータを上書きして前記分割領域に書き込むことを特徴とする請求項１記載のストレージ制御装置。
【請求項３】
前記検証情報を付加する所定のフィールドは、固定長であって、前記１以上の分割領域のうちの先頭の分割領域に位置することを特徴とする請求項２記載のストレージ制御装置。
【請求項４】
前記先頭の分割領域のデータが、前記固定長データフォーマットのデータの一部となる場合に、前記検証情報にもとづいて前記先頭の分割領域のデータの異常を検出する検出部を備えることを特徴とする請求項３記載のストレージ制御装置。
【請求項５】
前記検出部は、前記固定長データフォーマットのデータのうち前記先頭の分割領域のデータを除く既存データの異常を検出した場合に、前記既存データにおける前記所定のフィールドに異常検出情報を付加することを特徴とする請求項４記載のストレージ制御装置。
【請求項６】
前記１以上の分割領域のうちの末尾の分割領域のデータが、前記固定長データフォーマットのデータの一部となる場合に、前記固定長データフォーマットのデータのうち前記末尾の分割領域のデータを除く既存データの前記検証情報にもとづいて前記既存データの異常を検出する検出部を備えることを特徴とする請求項３記載のストレージ制御装置。
【請求項７】
前記検出部が前記書込部による書込対象のデータの異常を検出した場合に、前記書込対象のデータの上書きによりリカバリをおこなうリカバリ部を備えることを特徴とする請求項１乃至請求項６のいずれか１つに記載のストレージ制御装置。
【請求項８】
所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置の制御プログラムであって、
コンピュータに、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込む処理と、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する処理と、
を実行させることを特徴とするストレージ制御装置の制御プログラム。
【請求項９】
所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置の制御方法であって、
コンピュータが、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込むときに、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する、
処理を実行することを特徴とするストレージ制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御装置の制御プログラム、およびストレージ制御装置の制御方法に関する。
【背景技術】
【０００２】
情報処理システムに使用される外部記憶装置として、データアクセスの高速性やデータの障害耐性を高める構成を有するディスクアレイ装置（ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置ともいう）が多く用いられている。このディスクアレイ装置は、種類の異なる汎用的なオペレーティングシステムによって稼動するオープン系システムで多く利用されるため、固定長レコードのデータフォーマットを有している。
【０００３】
一方、メインフレーム系システムは、可変長レコードのデータフォーマットを扱う。そこで、ストレージ制御装置は、可変長レコードのデータフォーマットを固定長レコードのデータフォーマットに変換して、メインフレーム系システムから外部記憶装置へのアクセスを可能にしている。
【０００４】
データを外部記憶装置に記憶する際には、記憶したデータが再度読み出されるときに、エラーが生じていないかを判定するためのエラーチェックコードがデータに付される。たとえば、メインフレーム系システムのＣＫＤフォーマットでは、レコードを構成するフィールドごとにエラーチェックコードが付される。また、固定長データフォーマットでは、論理ブロックごとにエラーチェックコードが付される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１６４１４１号公報
【特許文献２】特開２００８−１９７８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ストレージ制御装置は、メインフレームホストから受け付けたデータのデータフォーマットを変換してメモリ上に一旦保持してから外部記憶装置に記憶させる。このとき、データに異常が生じて外部記憶装置にデータを書き込むことができなくなることがある。このような場合、ストレージ制御装置は、異常なデータを破棄し、メインフレームホストにエラー応答をおこないホストリトライをおこなう。
【０００７】
しかしながら、データ異常の態様によっては、ホストリトライが失敗し、メモリ上に異常なデータが残る異常状態（たとえば、Ｐｉｎｎｅｄ Ｄａｔａ）に至る場合がある。このような異常状態は、保守要員によるデータの復旧作業を必要とし、時間および人に係る工数、費用などの復旧コストを生じる。
【０００８】
したがって、ストレージ制御装置における復旧コストの抑制は、異常状態から復旧するリカバリ性能の改善によって図ることができる。
１つの側面では、本発明は、データ異常時のリカバリ性能を改善できるストレージ制御装置、ストレージ制御装置の制御プログラム、およびストレージ制御装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、以下に示すような、ストレージ制御装置が提供される。ストレージ制御装置は、所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した固定長データフォーマットのデータを記憶装置に記憶させる。ストレージ制御装置は、書込部と、検証情報付加部とを備える。書込部は、可変長データフォーマットのデータを、データ蓄積用メモリにおける固定長データを分割した分割データ長の１以上の連続した分割領域に書き込む。検証情報付加部は、１以上の分割領域に書き込まれる可変長データフォーマットの所定フィールドに、所定フィールドが位置する分割領域内のデータ異常を検証可能にする検証情報を付加する。
【発明の効果】
【００１０】
１態様によれば、ストレージ制御装置、ストレージ制御装置の制御プログラム、およびストレージ制御装置の制御方法において、データ異常時のリカバリ性能を改善できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【図２】第２の実施形態のストレージ装置とメインフレームホストとの接続、およびストレージ装置の構成の一例を示す図である。
【図３】第２の実施形態のメインフレームホストからＨＤＤへのデータのアクセス手順の一例を示す図である。
【図４】第２の実施形態の書込エラー発生後の状態の一例を示す図である。
【図５】第２の実施形態の書込エラー発生タイミング１における書込エラー発生の一例を示す図である。
【図６】第２の実施形態の書込エラー発生タイミング３における書込エラー発生の一例を示す図である。
【図７】第２の実施形態の書込エラー発生タイミング２における書込エラー発生の一例を示す図である。
【図８】第２の実施形態のＣＫＤレコードフォーマットパタン（その１）の一例を示す図である。
【図９】第２の実施形態のＣＫＤレコードフォーマットパタン（その２）の一例を示す図である。
【図１０】第２の実施形態のＣＫＤレコードフォーマットパタン（その３）の一例を示す図である。
【図１１】第２の実施形態のＣＫＤレコードフォーマットパタン（その４）の一例を示す図である。
【図１２】第２の実施形態のＣＫＤレコードフォーマットパタン（その５）の一例を示す図である。
【図１３】混在する更新対象レコードと他のレコードとがＬＢＡ内で混在するＣＫＤトラックの一例を示す図である。
【図１４】第２の実施形態のＣＫＤトラック破壊例（ケース１）を示す図である。
【図１５】第２の実施形態のＣＫＤトラック破壊例（ケース２）を示す図である。
【図１６】第２の実施形態のＣＫＤトラック破壊例（ケース３）を示す図である。
【図１７】第２の実施形態のＣＫＤトラック破壊例（ケース４）を示す図である。
【図１８】第２の実施形態のＣＫＤトラック破壊例（ケース５）を示す図である。
【図１９】第２の実施形態のＣＫＤトラック破壊例（ケース６）を示す図である。
【図２０】第２の実施形態のチェックコードを設けたカウント部のフォーマットの一例を示す図である。
【図２１】第２の実施形態のデータライト処理のフローチャートを示す図である。
【図２２】第２の実施形態のリカバリ処理のフローチャートを示す図である。
【図２３】第２の実施形態のレコード先端部リカバリ処理のフローチャートを示す図である。
【図２４】第２の実施形態のレコード終端部リカバリ処理のフローチャートを示す図である。
【図２５】第２の実施形態のデータリード処理のフローチャートを示す図である。
【図２６】第２の実施形態のＣＡのハードウェア構成の一例である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して実施の形態を詳細に説明する。
［第１の実施形態］
まず、第１の実施形態のストレージ制御装置について図１を用いて説明する。図１は、第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【００１３】
ストレージ制御装置１は、外部装置２からデータの書込指示を受け付けて記憶装置３にデータを記憶させ、また、外部装置２からデータの読出指示を受け付けて記憶装置３からデータを読み出して外部装置２に応答する。
【００１４】
外部装置２は、ストレージ制御装置１に対して記憶装置３へのデータの書込指示または記憶装置３からのデータの読出指示をおこなう。外部装置２が扱うデータは、可変長データフォーマット４である。可変長データフォーマット４は、複数のフィールド（たとえば、フィールド４ａ，４ｂ，４ｃ）を含んで構成される。外部装置２は、たとえば、メインフレーム系システムにあるメインフレームホストであり、ストレージ制御装置１にとっての上位装置に相当する。
【００１５】
記憶装置３は、データを記憶可能なストレージ装置であり、固定長データフォーマット５を有している。記憶装置３は、外部装置２にとって外部記憶装置である。記憶装置３は、ストレージ制御装置１によって制御され、ストレージ制御装置１を介してデータのリード（読み出し）／ライト（書き込み）がおこなわれる。記憶装置３は、たとえば、ハード ディスク ドライブ（ＨＤＤ：Hard Disk Drive）であり、１または２以上のＨＤＤによって構成されるディスクアレイ装置である。
【００１６】
ストレージ制御装置１は、外部装置２からフィールド４ａ，４ｂ，４ｃからなる可変長データフォーマット４のデータを受け付ける。ストレージ制御装置１は、可変長データフォーマット４のデータを、固定長データフォーマット５のデータに変換する。ストレージ制御装置１は、変換した固定長データフォーマット５のデータを記憶装置３に記憶させる。
【００１７】
ストレージ制御装置１は、データ蓄積用メモリ１ａと、書込部１ｂと、検証情報付加部１ｃとを含む。データ蓄積用メモリ１ａは、複数の分割領域６を有し、各分割領域単位でデータを保持可能にしている。分割領域６は、記憶装置３のデータ保持単位である固定長を２分割した分割長である。たとえば、記憶装置３のデータ保持単位が５１２ｂｙｔｅである場合に、分割長は、２５６ｂｙｔｅである。
【００１８】
なお、ストレージ制御装置１は、固定長を２分割した分割長の分割領域６に限らず、固定長を４分割、あるいは８分割した分割領域を有するものであってもよい。たとえば、記憶装置３のデータ保持単位が４０９６ｂｙｔｅである場合に、分割長は、４０９６ｂｙｔｅを８分割した５１２ｂｙｔｅであってもよい。
【００１９】
書込部１ｂは、可変長データフォーマット４のデータを、データ蓄積用メモリ１ａの分割領域６に書き込む。書込部１ｂは、可変長データフォーマット４のデータの大きさが分割長以下の場合に、１つの分割領域６に可変長データフォーマット４のデータを書き込む。書込部１ｂは、可変長データフォーマット４のデータの大きさが分割長を超える場合に、２以上の連続した分割領域６に可変長データフォーマット４のデータを書き込む。
【００２０】
たとえば、分割長の２倍を超えて分割長の３倍に満たない大きさのデータ７は、３つの分割領域６ｂ，６ｃ，６ｄに書き込まれる。分割領域６ｂは、フィールド４ａに対応するデータ７ａと、フィールド４ｂの一部（前部）に対応するデータ７ｂが書き込まれる。分割領域６ｃは、フィールド４ｂの一部（後部）に対応するデータ７ｃと、フィールド４ｃの一部（前部）に対応するデータ７ｄが書き込まれる。分割領域６ｄは、フィールド４ｃの一部（後部）に対応するデータ７ｅが書き込まれる。
【００２１】
このようにして、書込部１ｂは、可変長データフォーマット４のデータを、データ蓄積用メモリ１ａの分割領域６に書き込む。
検証情報付加部１ｃは、１以上の分割領域６に書き込まれる可変長データフォーマット４のフィールド４ａに検証情報８を付加する。検証情報８は、フィールド４ａが位置する分割領域６ｂ内のデータ（データ７ａとデータ７ｂ）の異常を検証可能にする情報である。たとえば、検証情報８は、ＣＲＣ（Cyclic Redundancy Check：巡回冗長検査）などのチェックコードである。
【００２２】
これにより、ストレージ制御装置１は、分割領域６単位でのデータ異常の検証をおこなうことができる。たとえば、分割領域６ｂを含む固定長データフォーマット５で記憶装置３にデータを書き込むことができなかった場合、ストレージ制御装置１は、検証情報８によって異常の原因が分割領域６ｂのデータにあるかないかを検証することができる。
【００２３】
たとえば、固定長データフォーマット５によれば、固定長単位のチェックコードによりデータ異常を検出することができる場合があるが、分割領域６ａ，６ｂのいずれか一方、または両方のデータに異常があることを検出できても、データ異常の分割領域６を特定することができない。また、可変長データフォーマット４によれば、可変長データフォーマット４は、フィールド４ａ，４ｂ，４ｃごとに付されたチェックコードにより、いずれのフィールドにデータの異常があるかを検出できる場合がある。しかしながら、このようなチェックコードは、フィールドが複数の分割領域６に跨った場合にデータ異常の分割領域６を特定することができない。
【００２４】
ストレージ制御装置１は、このような可変長データフォーマットのデータを受け付けて、固定長データフォーマットに変換する場合であっても、いずれの分割領域６にデータ異常があるかを検証可能にし得る。ストレージ制御装置１は、分割領域６のデータ異常の有無を検証可能にしたことで、データ異常時のリカバリ性能を改善できる。このようなストレージ制御装置１は、保守要員によるデータの復旧作業を軽減し、時間および人に係る工数、費用などの復旧コストを低減できる。
【００２５】
［第２の実施形態］
次に、第２の実施形態のストレージ装置とメインフレームホストとの接続、およびストレージ装置の構成について図２を用いて説明する。図２は、第２の実施形態のストレージ装置とメインフレームホストとの接続、およびストレージ装置の構成の一例を示す図である。
【００２６】
ストレージ装置１０は、メインフレームホスト１１の外部記憶装置であるＨＤＤ１２を制御する。ストレージ装置１０は、メインフレームホスト１１からデータの書込指示を受け付けてＨＤＤ１２にデータを記憶させ、また、メインフレームホスト１１からデータの読出指示を受け付けてＨＤＤ１２からデータを読み出してメインフレームホスト１１に応答する。
【００２７】
メインフレームホスト１１は、メインフレーム系システムに含まれ、ストレージ制御装置１にとって上位装置に相当する。メインフレームホスト１１は、ＣＨ（Channel）１３を備える。ＣＨ１３は、メインフレームホスト１１のＩ／Ｆ（Interface）制御モジュールである。メインフレームホスト１１は、ＣＨ＃Ａ、ＣＨ＃Ｂ、ＣＨ＃Ｃ、ＣＨ＃Ｄ、ＣＨ＃Ｅ、ＣＨ＃Ｆ、ＣＨ＃Ｇ、およびＣＨ＃Ｈの８つのＣＨ１３を備える。なお、ＨＤＤ＃０、ＨＤＤ＃１、ＨＤＤ＃２、およびＨＤＤ＃３のそれぞれは、１または２以上のＨＤＤによって構成されるディスクアレイ装置であってもよい。
【００２８】
ストレージ装置１０は、ＨＤＤ１２と、ＣＡ（Channel Adapter）１４と、ＣＭ（Controller Module）１５を含む。ＨＤＤ１２は、１レコードを５１２ｂｙｔｅの固定長データフォーマットで記憶するデータ格納デバイスである。ストレージ装置１０は、ＨＤＤ＃０、ＨＤＤ＃１、ＨＤＤ＃２、およびＨＤＤ＃３の４つのＨＤＤ１２を備える。
【００２９】
ＣＡ１４は、ストレージ装置１０のＩ／Ｆ制御モジュールである。ストレージ装置１０は、ＣＡ＃０、ＣＡ＃１、ＣＡ＃２、ＣＡ＃３、ＣＡ＃４、ＣＡ＃５，ＣＡ＃６、およびＣＡ＃７の８つのＣＨ１３を備える。
【００３０】
ＣＭ１５は、データの排他制御、ＣＭ１５が備えるキャッシュメモリ（データ蓄積用メモリ）１６の管理、ＨＤＤ１２のリード／ライト制御など、ストレージ装置１０を統括的に制御する制御モジュールである。ＣＡ１４は、メインフレームホスト１１からの読出要求（リードＩ／Ｏ）に対応するデータをキャッシュメモリ１６から読み出して、メインフレームホスト１１に転送するとともに、メインフレームホスト１１から書込要求（ライトＩ／Ｏ）のあったデータをキャッシュメモリ１６上に書き込む。ストレージ装置１０は、ＣＭ＃０、ＣＭ＃１、ＣＭ＃２、およびＣＭ＃３の４つのＣＭ１５を備える。
【００３１】
ＣＭ１５は、２つのＣＡ１４と接続する冗長構成を有する。ＣＭ＃０は、ＣＡ＃０およびＣＡ＃１と接続し、ＣＭ＃１は、ＣＡ＃２およびＣＡ＃３と接続する。ＣＭ＃２は、ＣＡ＃４およびＣＡ＃５と接続し、ＣＭ＃３は、ＣＡ＃６およびＣＡ＃７と接続する。
【００３２】
ＣＡ１４は、メインフレームホスト１１の対応するＣＨ１３と接続する。ＣＡ＃０は、ＣＨ＃Ａと接続し、ＣＡ＃１は、ＣＨ＃Ｂと接続する。ＣＡ＃２は、ＣＨ＃Ｃと接続し、ＣＡ＃３は、ＣＨ＃Ｄと接続する。ＣＡ＃４は、ＣＨ＃Ｅと接続し、ＣＡ＃５は、ＣＨ＃Ｆと接続する。ＣＡ＃６は、ＣＨ＃Ｇと接続し、ＣＡ＃７は、ＣＨ＃Ｈと接続する。
【００３３】
ＣＭ１５は、キャッシュメモリ１６を備える。キャッシュメモリ１６は、ＨＤＤ１２から読み出されたデータを格納し、また、メインフレームホスト１１から書込要求のあったデータを格納する。ＣＭ＃０はキャッシュメモリ＃０を備え、ＣＭ＃１はキャッシュメモリ＃１を備え、ＣＭ＃２はキャッシュメモリ＃２を備え、ＣＭ＃３はキャッシュメモリ＃３を備える。
【００３４】
ＣＭ１５は、内部バス１７を介してＨＤＤ１２と接続する。ＣＭ１５は、すべてのＨＤＤ１２にアクセス可能であるが担当するＨＤＤ１２が設定されている。ＣＭ＃０はＨＤＤ＃０を担当し、ＣＭ＃１はＨＤＤ＃１を担当し、ＣＭ＃２はＨＤＤ＃２を担当し、ＣＭ＃３はＨＤＤ＃３を担当する。これにより、ストレージ装置１０は、ＣＭ１５間でのＨＤＤ１２へのアクセス競合を防止し、ＣＭ１５のメモリリソースの低減や、ＨＤＤ１２の性能低下の抑止を図ることができる。
【００３５】
次に、第２の実施形態のメインフレームホストからＨＤＤへのデータのアクセス手順について図３を用いて説明する。図３は、第２の実施形態のメインフレームホストからＨＤＤへのデータのアクセス手順の一例を示す図である。
【００３６】
まず、モジュール間で送受信されるデータのフォーマットについて説明する。メインフレームホスト１１とストレージ装置１０の間、すなわちＣＨ１３とＣＡ１４の間は、可変長データフォーマットのデータが送受信される。第２の実施形態では、可変長データフォーマットとしてＣＫＤフォーマットを用いる。可変長データフォーマットは、たとえば、１ｂｙｔｅから４７ｋｂｙｔｅまでのデータ長のデータを扱うことができる。
【００３７】
ＣＭ１５のキャッシュメモリ１６とＣＡ１４との間は、ハーフ論理ブロックサイズの固定長データフォーマットのデータが送受信される。ＣＡ１４は、可変長データフォーマットと固定長データフォーマットの相互変換をおこなう。キャッシュメモリ１６は、ハーフ論理ブロックサイズの単位でデータの管理をおこなう。
【００３８】
ＣＭ１５のキャッシュメモリ１６とＨＤＤ１２との間は、論理ブロックサイズの固定長データフォーマットのデータが送受信される。ＨＤＤ１２は、論理ブロックサイズの単位でデータを記録する。
【００３９】
上述したデータフォーマットにおける各モジュール間におけるデータのアクセス手順について図３に示す一例に沿って説明する。
［ステップＳ１１１］メインフレームホスト１１は、ＣＨ＃ＥからＨＤＤ＃０に対するライトＩ／Ｏを発行する。ストレージ装置１０は、ＣＨ＃Ｅに対応するＣＡ＃４によりライトＩ／Ｏを受け付ける。このとき、ＣＨ＃ＥからＣＡ＃４に対して送信されるデータは、ＣＫＤフォーマットの可変長データである。
【００４０】
［ステップＳ１１２］ＣＡ＃４は、ＣＭ＃２からキャッシュメモリ＃２の割当を受けて、ＣＫＤフォーマットの可変長データを、ハーフ論理ブロックサイズの固定長データフォーマットに変換したデータＤ１１をキャッシュメモリ＃２に書き込む。さらに、ＣＭ＃２は、ＨＤＤ＃０を担当するＣＭ＃０と、ＣＭ＃０の対となるＣＭ＃１とに、キャッシュメモリ１６の割当を要求し、ＣＭ＃０からキャッシュメモリ＃０の割当を受け付け、ＣＭ＃１からキャッシュメモリ＃１の割当を受け付ける。なお、ＣＭ１５は、あらかじめ対となるＣＭ１５が決められていて、一方に障害が発生した場合に他方が一方の処理を引き継ぐことで障害発生時におけるストレージ装置１０の可用性を確保している。たとえば、ＣＭ＃０とＣＭ＃１の対、およびＣＭ＃２とＣＭ＃３の対があらかじめ設定されている。
【００４１】
［ステップＳ１１３］ＣＭ＃２は、ＣＡ＃４によって書き込まれたデータＤ１１を、キャッシュメモリ＃０とキャッシュメモリ＃１にコピーする。これにより、ＨＤＤ＃０を担当するＣＭ＃０がデータＤ１３を保持し、ＣＭ＃０の対となるＣＭ＃１がデータＤ１２を保持することで、ストレージ装置１０は、書込データの二重化をおこなう。
【００４２】
［ステップＳ１１４］ＣＭ＃０は、キャッシュメモリ＃０が保持するデータＤ１３をＨＤＤ＃０に書き込む。このとき、ＣＭ＃０からＨＤＤ＃０に対して送信されるデータは、論理ブロックサイズの単位のデータである。ＨＤＤ＃０が保持するデータＤ１４は、論理ブロックサイズの単位のデータであることから、ＣＭ＃０は、データＤ１３をＨＤＤ＃０に書き込む場合に、必要に応じてＲＭＷ（Read Modify Write）をおこなう。
【００４３】
次に、第２の実施形態のメインフレームホストからＨＤＤへのデータのアクセス時の書込エラー発生後の状態について図４から図６を用いて説明する。図４は、第２の実施形態の書込エラー発生後の状態の一例を示す図である。
【００４４】
図３に示したアクセス手順において、メインフレームホスト１１からＨＤＤ１２へのデータのアクセス時に書込エラーが発生するタイミングは以下の３つである。
１つ目は、ＣＡ＃４からＣＭ＃２へのデータ転送タイミングである。すなわち、書込エラー発生タイミングの１つは、ＣＡ１４からＣＭ１５へのデータ転送タイミング（書込エラー発生タイミング１）である。
【００４５】
２つ目は、ＣＭ＃２からＣＭ＃０またはＣＭ＃１へのデータ転送タイミングである。すなわち、書込エラー発生タイミングの１つは、送信元ＣＭ１５から送信先ＣＭ１５（書込先ＨＤＤ１２の担当ＣＭ１５と、担当ＣＭ１５と対となるＣＭ１５）へのデータ転送タイミング（書込エラー発生タイミング２）である。
【００４６】
３つ目は、ＣＭ＃０からＨＤＤ＃０へのデータ転送タイミングである。すなわち、書込エラー発生タイミングの１つは、担当ＣＭ１５から書込先ＨＤＤ１２へのデータ転送タイミング（書込エラー発生タイミング３）である。なお、担当ＣＭ１５に障害が発生した場合には、担当ＣＭ１５と対となるＣＭ１５から書込先ＨＤＤ１２へのデータ転送タイミングを含む。
【００４７】
まず、書込エラー発生タイミング１について図５を用いて説明する。図５は、第２の実施形態の書込エラー発生タイミング１における書込エラー発生の一例を示す図である。
［ステップＳ１２１］メインフレームホスト１１は、ＣＨ＃ＥからＨＤＤ＃０に対するライトＩ／Ｏを発行する。ストレージ装置１０は、ＣＨ＃Ｅに対応するＣＡ＃４によりライトＩ／Ｏを受け付ける。
【００４８】
［ステップＳ１２２］ＣＡ＃４は、データＤ１１をキャッシュメモリ＃２に書き込む。ここで、データＤ１１に生じた異常がデータ異常ａ（図４）である。この時点では、キャッシュメモリ＃０、キャッシュメモリ＃１、およびＨＤＤ＃０は、データの書込前である。
【００４９】
［ステップＳ１２３］ＣＭ＃２は、データＤ１１の異常を検出してメインフレームホスト１１に対してホストリトライをおこなう。
［ステップＳ１２４］メインフレームホスト１１は、ＣＨ＃Ｅと異なるＣＨ＃ＧからＨＤＤ＃０に対するライトＩ／Ｏを発行する。ストレージ装置１０は、ＣＨ＃Ｇに対応するＣＡ＃６によりライトＩ／Ｏを受け付ける。
【００５０】
［ステップＳ１２５］ＣＡ＃４は、データＤ１５をキャッシュメモリ＃３に書き込む。以下、ストレージ装置１０は、ステップＳ１１３およびステップＳ１１４と同様の処理であるステップＳ１２６およびステップＳ１２７をおこなう。
【００５１】
このように、ストレージ装置１０は、書込エラー発生タイミング１について、メインフレームホスト１１にエラー応答をおこなう。ストレージ装置１０は、キャッシュメモリ＃０、キャッシュメモリ＃１、およびＨＤＤ＃０にデータを書き込む前なので、異常を生じたデータＤ１１を破棄してホストリトライをおこなうことによってデータ異常ａをリカバリできる。
【００５２】
次に、書込エラー発生タイミング３について図６を用いて説明する。図６は、第２の実施形態の書込エラー発生タイミング３における書込エラー発生の一例を示す図である。
ストレージ装置１０は、ステップＳ１１１からステップＳ１１３と同様の処理であるステップＳ１３１からステップＳ１３３をおこなう。
【００５３】
［ステップＳ１３４］ＣＭ＃０は、キャッシュメモリ＃０が保持するデータＤ１３をＨＤＤ＃０に書き込む。ここで、データＤ１４に生じた異常がデータ異常ｄ（図４）である。この時点では、キャッシュメモリ＃０、キャッシュメモリ＃１、およびキャッシュメモリ＃２は、データが正常に書き込まれている。
【００５４】
［ステップＳ１３５］データ異常ｄの検出により、ストレージ装置１０は、正常に書込をおこなえないＣＭ＃０を切り離し、ＨＤＤ＃０の担当をＣＭ＃１に組み替える。これによりＨＤＤ＃１の担当となったＣＭ＃１は、キャッシュメモリ＃１が保持するデータＤ１２をＨＤＤ＃０に書き込む。
【００５５】
このように、ストレージ装置１０は、書込エラー発生タイミング３について、担当ＣＭメインフレームホスト１１にエラー応答をおこなう。ストレージ装置１０は、キャッシュメモリ＃０、キャッシュメモリ＃１、およびＨＤＤ＃０にデータを書き込む前なので、異常を生じたデータＤ１１を破棄してホストリトライをおこなうことによってデータ異常ａをリカバリできる。
【００５６】
次に、書込エラー発生タイミング２について図７を用いて説明する。図７は、第２の実施形態の書込エラー発生タイミング２における書込エラー発生の一例を示す図である。
ストレージ装置１０は、ステップＳ１１１およびステップＳ１１２と同様の処理であるステップＳ１４１およびステップＳ１４２をおこなう。
【００５７】
［ステップＳ１４３］ＣＭ＃２は、ＣＡ＃４によって書き込まれたデータＤ１１を、キャッシュメモリ＃０とキャッシュメモリ＃１にコピーする。ここで、データＤ１３に生じた異常がデータ異常ｂ（図４）であり、データＤ１２に生じた異常がデータ異常ｃ（図４）である。この時点では、キャッシュメモリ＃２は、データが正常に書き込まれているが、ＨＤＤ＃０は、データの書込前である。
【００５８】
［ステップＳ１４４］ＣＭ＃０は、キャッシュメモリ＃０が保持するデータＤ１３をＨＤＤ＃０に書き込もうとするが、データＤ１３に異常があるためＨＤＤ＃０に書き込むことができない。
【００５９】
［ステップＳ１４５］ＣＭ＃１は、ＣＭ＃０に代わってキャッシュメモリ＃１が保持するデータＤ１２をＨＤＤ＃０に書き込もうとするが、データＤ１２に異常があるためＨＤＤ＃０に書き込むことができない。
【００６０】
このような異常なデータは、ＨＤＤ１２に書き込むことができないためにキャッシュメモリ１６上に残る。このような状態は、「Ｐｉｎｎｅｄ Ｄａｔａ」と呼ばれる。このような場合においても、ストレージ装置１０は、異常を生じたデータを破棄してホストリトライをおこなうことによってデータ異常ｂ、データ異常ｃをリカバリできることがあるが、ホストリトライによってもリカバリできないことがある。このようなホストリトライによってリカバリできない場合に、保守要員によるデータの復旧作業を要し、時間および人に係る工数、費用などの復旧コストがかかっていた。
【００６１】
ホストリトライが失敗する原因は、データのフォーマットと、データ異常の発生している位置に依存する。まず、ハーフ論理ブロックサイズの固定長データフォーマットに変換されてキャッシュメモリ１６に格納されるＣＫＤレコードフォーマットパタンについて、図８から図１２を用いて説明する。図８は、第２の実施形態のＣＫＤレコードフォーマットパタン（その１）の一例を示す図である。図９は、第２の実施形態のＣＫＤレコードフォーマットパタン（その２）の一例を示す図である。図１０は、第２の実施形態のＣＫＤレコードフォーマットパタン（その３）の一例を示す図である。図１１は、第２の実施形態のＣＫＤレコードフォーマットパタン（その４）の一例を示す図である。図１２は、第２の実施形態のＣＫＤレコードフォーマットパタン（その５）の一例を示す図である。
【００６２】
可変長データフォーマットのレコードは、ハーフ論理ブロックサイズの固定長データフォーマットに変換されてキャッシュメモリ１６に格納される。
ここで、ＣＫＤレコードフォーマットパタンについて説明する。可変長データフォーマットのレコードＲ＃１は、ＣＫＤレコードフォーマットのデータ構造を有し、カウント部（図中、Ｃとして表す）、キー部（図中、Ｋとして表す）、およびデータ部（図中、Ｄとして表す）の３つのフィールドから構成される。カウント部は固定長であり、レコードＲ＃１のアドレスとデータ長の情報を含む。キー部は可変長であり、オペレーティングシステムがレコードＲ＃１を識別するために用いられる。データ部は可変長であり、ユーザデータが格納される領域である。
【００６３】
上述したように、キャッシュメモリ１６ではハーフ論理ブロック（ＨＬＢＡ：Half Logical Block Address）の単位でデータを管理しているので、可変長データ（ＣＫＤデータ）のレコードはハーフ論理ブロック（ＨＬＢＡ＃２）の先頭から格納される。たとえば、レコード＃Ｒ１はＨＬＢＡ＃２の先頭から格納され、レコード＃Ｒ２はＨＬＢＡ＃７の先頭から格納される。そのため、１つのハーフ論理ブロック内に２つ以上のＣＫＤデータのレコードが格納されることはない。なお、ＣＫＤデータのレコードの中間部が位置するＨＬＢＡの数は、ＣＫＤデータのレコードの大きさによって変化する。中間部は、ＣＫＤデータのレコードの先端（先頭）部と終端（末尾）部が位置しない部分である。
【００６４】
また、フィールドごとにエラー保護のために計算された８バイトのエラーチェックコード（以下、ＦＣＣ（Field Check Code：フィールドチェックコード）という）が書き込まれる。ＦＣＣ（第２の検証情報）は、各フィールドの最後の８バイトに書込まれる。ＦＣＣは、たとえば、ＣＲＣを用いることができる。
【００６５】
１つの論理ブロック（ＬＢＡ：Logical Block Address）は、２つのハーフ論理ブロックを含み、論理ブロックのエラー保護のために計算された８バイトのエラーチェックコード（以下、ＢＣＣ（Block Check Code：ブロックチェックコード）という）を有する。ＢＣＣ（第３の検証情報）は、たとえば、ＣＲＣを用いることができる。
【００６６】
ＣＫＤレコードフォーマットパタン（その１）２１０は、更新対象（図中ハッチングで示す）のレコードＲ＃１のレコードの終端部と、後のレコード（レコードＲ＃２）の先端部とがＬＢＡ内で混在するパタンを示す。すなわち、ＬＢＡ＃３に含まれる２つのＨＬＢＡのうちの１つであるＨＬＢＡ＃６にレコードＲ＃１が格納され、もう１つであるＨＬＢＡ＃７にレコードＲ＃２が格納されている。
【００６７】
ＣＫＤレコードフォーマットパタン（その２）２１１は、更新対象のレコードＲ＃２のレコードの先端部と、前のレコード（レコードＲ＃１）の終端部とがＬＢＡ内で混在するパタンを示す。すなわち、ＬＢＡ＃１に含まれる２つのＨＬＢＡのうちの１つであるＨＬＢＡ＃２にレコードＲ＃１が格納され、もう１つであるＨＬＢＡ＃３にレコードＲ＃２が格納されている。
【００６８】
ＣＫＤレコードフォーマットパタン（その３）２１２は、更新対象のレコードＲ＃２の先端部と終端部の双方が他のレコードと別々のＬＢＡ内で混在するパタンを示す。更新対象のレコードＲ＃２のレコードの先端部は、前のレコード（レコードＲ＃１）の終端部と１つのＬＢＡ内で混在し、更新対象のレコードＲ＃２のレコードの終端部は、後のレコード（レコードＲ＃３）の先端部ともう１つのＬＢＡ内で混在する。すなわち、ＬＢＡ＃１に含まれる２つのＨＬＢＡのうちの１つであるＨＬＢＡ＃２にレコードＲ＃１が格納され、もう１つであるＨＬＢＡ＃３にレコードＲ＃２が格納されている。さらに、ＬＢＡ＃３に含まれる２つのＨＬＢＡのうちの１つであるＨＬＢＡ＃６にレコードＲ＃２が格納され、もう１つであるＨＬＢＡ＃７にレコードＲ＃３が格納されている。
【００６９】
ＣＫＤレコードフォーマットパタン（その４）２１３は、更新対象のレコードＲ＃２が１つのＨＬＢＡ内に納まり、ＬＢＡ内で他のレコードと混在するパタンを示す。すなわち、ＬＢＡ＃１に含まれる２つのＨＬＢＡのうちの１つであるＨＬＢＡ＃２にレコードＲ＃１が格納され、もう１つであるＨＬＢＡ＃３にレコードＲ＃２が格納されている。
【００７０】
ＣＫＤレコードフォーマットパタン（その５）２１４は、更新対象のレコードＲ＃２がＬＢＡ内で他のレコードと混在しないパタンを示す。すなわち、ＬＢＡ＃２に含まれる２つのＨＬＢＡ（ＨＬＢＡ＃４、ＨＬＢＡ＃５）にレコードＲ＃２が格納されている。
【００７１】
上述した５つのＣＫＤレコードフォーマットパタンのうちホストリトライが失敗する原因となるのは、ＣＫＤレコードフォーマットパタン（その１）２１０からＣＫＤレコードフォーマットパタン（その４）２１４に示したパタンである。そのうち、ＣＫＤレコードフォーマットパタン（その３）２１２は、ＣＫＤレコードフォーマットパタン（その１）２１０とＣＫＤレコードフォーマットパタン（その２）２１１が重複するパタンの一形態である。また、ＣＫＤレコードフォーマットパタン（その４）２１４は、ＣＫＤレコードフォーマットパタン（その１）２１０、またはＣＫＤレコードフォーマットパタン（その２）２１１の一形態である。
【００７２】
ここで、ＬＢＡ内で他のレコードと混在する更新対象レコードのＲＭＷについて図１３を用いて説明する。図１３は、混在する更新対象レコードと他のレコードとがＬＢＡ内で混在するＣＫＤトラックの一例を示す図である。ＣＫＤトラック２２０は、図１０に示したＣＫＤレコードフォーマットパタン（その３）２１２を簡略化したＣＫＤトラックの一形態である。
【００７３】
ＲＭＷは、更新対象レコードＲ＃１２をＬＢＡ＃３、ＬＢＡ＃４に書き込むような場合におこなわれる。ＣＡ１４は、ＨＬＢＡ＃７を先頭にしてＨＬＢＡ＃８までを、更新対象レコードＲ＃１２の書込範囲（書込範囲ＲＡ２）とする。このとき、ＨＤＤ１２の最小アクセス単位であるＬＢＡ＃３は、ＨＬＢＡ＃６のデータ（レコードＲ＃１１）が不足範囲ＲＡ１となり、ＬＢＡ＃４は、ＨＬＢＡ＃９のデータ（レコードＲ＃１３）が不足範囲ＲＡ３となる。
【００７４】
ＣＡ１４は、不足範囲ＲＡ１と不足範囲ＲＡ３のデータを補うため、最小読出範囲ＲＡ５と最小読出範囲ＲＡ６のデータをＨＤＤ１２から読み出す。ＣＡ１４は、読み出したデータの異常の有無をＢＣＣにより確認する。ＣＡ１４は、読み出したデータに異常がなければ、読み出したデータに書込範囲ＲＡ２をマージする。ＣＡ１４は、マージしたデータ、すなわち書き戻し範囲ＲＡ４のデータをキャッシュメモリ１６に書き戻す。
【００７５】
ここで、書き戻し範囲ＲＡ４のデータに異常があると、ＣＡ１４は、ＲＭＷを失敗し、ホストリトライによって復旧できない。
次に、ＲＭＷにおけるデータ異常を、図１４から図１９に示すＣＫＤトラックの破壊例を用いて説明する。まず、ＣＫＤトラック破壊例（ケース１）について図１４を用いて説明する。図１４は、第２の実施形態のＣＫＤトラック破壊例（ケース１）を示す図である。図１５は、第２の実施形態のＣＫＤトラック破壊例（ケース２）を示す図である。図１６は、第２の実施形態のＣＫＤトラック破壊例（ケース３）を示す図である。図１７は、第２の実施形態のＣＫＤトラック破壊例（ケース４）を示す図である。図１８は、第２の実施形態のＣＫＤトラック破壊例（ケース５）を示す図である。図１９は、第２の実施形態のＣＫＤトラック破壊例（ケース６）を示す図である。
【００７６】
ＣＫＤトラック破壊のケース１は、更新対象レコードの終端部が位置するＬＢＡ内にある更新対象レコードを含む２つのレコードのうち更新対象レコードが位置するＨＬＢＡにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース１）２３０は、更新対象レコードＲ＃２２が位置するＬＢＡ＃４のうちＨＬＢＡ＃８にデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃４のＢＣＣ異常を検出する。
【００７７】
ＣＫＤトラック破壊のケース２は、更新対象レコードの終端部が位置するＬＢＡ内にある更新対象レコードを含む２つのレコードのうち更新対象でないレコードが位置するＨＬＢＡにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース２）２３１は、更新対象レコードＲ＃２２が位置するＬＢＡ＃４のうちＨＬＢＡ＃９にデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃４のＢＣＣ異常を検出する。
【００７８】
ＣＫＤトラック破壊のケース３は、更新対象レコードの終端部が位置するＬＢＡ内にある２つのＨＬＢＡのそれぞれにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース３）２３２は、更新対象レコードＲ＃２２が位置するＬＢＡ＃４のうちＨＬＢＡ＃８とＨＬＢＡ＃９とにデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃４のＢＣＣ異常を検出する。
【００７９】
ＣＫＤトラック破壊のケース４は、更新対象レコードの先端部が位置するＬＢＡ内にある更新対象レコードを含む２つのレコードのうち更新対象でないレコードが位置するＨＬＢＡにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース４）２３３は、更新対象レコードＲ＃２２が位置するＬＢＡ＃３のうちＨＬＢＡ＃６にデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃３のＢＣＣ異常を検出する。
【００８０】
ＣＫＤトラック破壊のケース５は、更新対象レコードの先端部が位置するＬＢＡ内にある更新対象レコードを含む２つのレコードのうち更新対象レコードが位置するＨＬＢＡにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース５）２３４は、更新対象レコードＲ＃２２が位置するＬＢＡ＃３のうちＨＬＢＡ＃７にデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃３のＢＣＣ異常を検出する。
【００８１】
ＣＫＤトラック破壊のケース６は、更新対象レコードの先端部が位置するＬＢＡ内にある２つのＨＬＢＡのそれぞれにデータ異常個所があるケースである。ＣＫＤトラック破壊例（ケース６）２３５は、更新対象レコードＲ＃２２が位置するＬＢＡ＃３のうちＨＬＢＡ＃６とＨＬＢＡ＃７とにデータ異常個所がある。ＣＡ１４は、ＲＭＷでＬＢＡ＃３のＢＣＣ異常を検出する。
【００８２】
ＣＡ１４は、ＣＫＤトラック破壊のケース１から６に示したＢＣＣ異常の検出に対して、ホストリトライにより復旧しようとするとレコード＃２１やレコード＃２３に異常があった場合にまでＢＣＣを更新してしまう。この場合、レコード＃２１やレコード＃２３のデータ異常を検出できなくなるため、データ異常個所をＨＬＢＡ単位で特定する必要がある。なお、フィールド単位でデータ異常を検出するＦＣＣがあるが、ＦＣＣはＨＬＢＡ単位でデータ異常個所を特定できない。
【００８３】
そこで、ＣＫＤレコードフォーマットのカウント部にチェックコード（第１の検証情報）を設けてカウント部が位置するＨＬＢＡのデータ異常を検出可能にする。チェックコードを設けたカウント部について図２０を用いて説明する。図２０は、第２の実施形態のチェックコードを設けたカウント部のフォーマットの一例を示す図である。
【００８４】
ＣＡ１４は、メインフレームホスト１１からＣＫＤレコードフォーマットのカウント部を８ｂｙｔｅのデータとして受け取るが、制御情報を付加して６４ｂｙｔｅのデータからなるカウント部２４０をキャッシュメモリ１６に書き込む。
【００８５】
カウント部２４０は、４ｂｙｔｅのフラグと、４４ｂｙｔｅの制御情報と、８ｂｙｔｅのＣＣＨＨＲＫＤＤと、８ｂｙｔｅのＦＣＣとを含むフォーマットである。４４ｂｙｔｅの制御情報は、４ｂｙｔｅのチェックコードを含む。
【００８６】
フラグは、ＣＫＤレコードにおけるカウント部の正常／異常を示すフラグ１と、キー部の正常／異常を示すフラグ２と、データ部の正常／異常を示すフラグ３と、チェックコードの有効／無効を示すフラグ４とを含む。フラグ１、フラグ２、およびフラグ３は、各フィールドのデータの書き込み時または読み出し時に異常を検出した場合にセットされる。フラグ１、フラグ２、およびフラグ３は、データ読み出し時に参照され、フラグがセットされている場合、ＣＡ１４は、メインフレームホスト１１に対してデータ異常を報告する。セットされたフラグは、リトライによりデータの書き込みが正常に終了した場合にリセットされる。
【００８７】
制御情報は、ＨＤＤ１２に固有の制御情報である。従来の制御情報は、未使用の予約領域があり、カウント部２４０は予約領域にチェックコードの領域を有している。チェックコードは、カウント部２４０が位置するＨＬＢＡのデータ異常を検出可能なチェックコードである。カウント部２４０は、ＣＫＤレコードフォーマットが有する複数のフィールドのうち先頭に位置することから更新対象レコードの先頭部が位置するＨＬＢＡに位置する。また、カウント部２４０はＨＬＢＡに納まるサイズであることから、２以上のＨＬＢＡに分割されることもない。
【００８８】
ＣＣＨＨＲＫＤＤは、メインフレームホスト１１から受け取ったカウント部であり、「ＣＣＨＨＲＫＤＤ」を構成する各キャラクタがデータ種別とデータサイズを示す。すなわち、「ＣＣ」はシリンダ値を示す２ｂｙｔｅのデータであることを示し、「ＨＨ」はヘッド値を示す２ｂｙｔｅのデータであることを示す。また、「Ｒ」はレコード番号を示す１ｂｙｔｅのデータであることを示し、「Ｋ」はキー長（キー部のデータ長）を示す１ｂｙｔｅのデータであることを示し、「ＤＤ」はデータ長（データ部のデータ長）を示す２ｂｙｔｅのデータであることを示す。
【００８９】
ＦＣＣは、カウント部２４０のデータを保証するためのチェックコードである。
次に、このチェックコードを用いたデータ異常発生位置の判定と、データ異常発生位置に対応するリカバリをおこなう各処理について説明する。まず、データ書き込み時におこなうデータライト処理について図２１を用いて説明する。図２１は、第２の実施形態のデータライト処理のフローチャートを示す図である。データライト処理は、ＣＡ１４がメインフレームホスト１１からライトＩ／Ｏを受け付けて実行する処理である。
【００９０】
［ステップＳ１１］ＣＡ１４は、メインフレームホスト（ホスト）１１から書き込みをおこなうレコードのデータを受信する。
［ステップＳ１２］ＣＡ１４は、カウント部のフラグ領域にあるデータ異常フラグ（フラグ１、フラグ２、およびフラグ３）をリセットする。
【００９１】
［ステップＳ１３］ＣＡ１４は、カウント部のフラグ領域にあるチェックコード有効フラグ（フラグ４）をセットする。
［ステップＳ１４］ＣＡ１４は、カウント部が位置するＨＬＢＡに書き込むデータにもとづいてチェックコードを生成する。
【００９２】
［ステップＳ１５］ＣＡ１４は、制御情報を付加したデータをキャッシュメモリ１６に書き込む。
［ステップＳ１６］ＣＡ１４は、キャッシュメモリ１６に書き込んだデータのエラー検出をおこなう。ＣＡ１４は、エラーを検出した場合にステップＳ１７にすすみ、エラーを検出しない場合にステップＳ２０にすすむ。
【００９３】
［ステップＳ１７］ＣＡ１４は、検出したエラーのリカバリをおこなうリカバリ処理を実行する。リカバリ処理の詳細は、図２２を用いて後で説明する。
［ステップＳ１８］ＣＡ１４は、リカバリ処理において検出したエラーのリカバリを成功したか否かを判定する。ＣＡ１４は、エラーのリカバリを成功した場合にステップＳ２０にすすみ、エラーのリカバリを成功しない場合にステップＳ１９にすすむ。
【００９４】
［ステップＳ１９］ＣＡ１４は、メインフレームホスト１１にデータライトの正常終了を報告し、データライト処理を終了する。
［ステップＳ２０］ＣＡ１４は、メインフレームホスト１１にエラー（データライトの失敗）を報告し、データライト処理を終了する。
【００９５】
メインフレームホスト１１は、エラー報告を受け取ると、同じデータのライトをリトライするリカバリをおこなう。メインフレームホスト１１は、リトライを規定回数失敗すると、リトライアウトとしてデータライト失敗を確定する。
【００９６】
次に、リカバリ処理について図２２を用いて説明する。図２２は、第２の実施形態のリカバリ処理のフローチャートを示す図である。リカバリ処理は、ＣＡ１４がデータライト処理のステップＳ１７で実行する処理である。
【００９７】
［ステップＳ２１］ＣＡ１４は、データライト処理のステップＳ１６で検出したエラーがＢＣＣによるＣＲＣエラーであるか否かを判定する。ＣＡ１４は、検出したエラーがＣＲＣエラーである場合にステップＳ２２にすすみ、ＣＲＣエラーでない場合にステップＳ３２にすすむ。ＣＲＣエラーでないエラーは、リカバリできないエラーであり、たとえば、ハードウェア異常などがある。
【００９８】
［ステップＳ２２］ＣＡ１４は、更新対象レコードの中間部が位置するＬＢＡからＣＲＣエラーを検出したか否かを判定する。更新対象レコードの中間部が位置するＬＢＡからＣＲＣエラーを検出したか否かは、エラー情報に含まれるエラー発生アドレスから計算して判定できる。ＣＡ１４は、更新対象レコードの中間部が位置するＬＢＡからＣＲＣエラーを検出した場合にステップＳ２３にすすみ、更新対象レコードの中間部が位置するＬＢＡからＣＲＣエラーを検出しない場合にステップＳ２５にすすむ。
【００９９】
［ステップＳ２３］ＣＡ１４は、更新対象レコードの中間部についてエラーのリカバリをおこなう。ＣＡ１４は、異常を生じたデータを破棄してホストリトライをおこなうことによって更新対象レコードの中間部についてエラーをリカバリすることができる。
【０１００】
［ステップＳ２４］ＣＡ１４は、さらなるエラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ２１にすすみ、エラー検出がなければステップＳ３１にすすむ。
【０１０１】
［ステップＳ２５］ＣＡ１４は、ステップＳ２１からステップＳ２４により更新対象レコードの中間部にエラー原因がない場合に当該処理を実行する。ＣＡ１４は、更新対象レコードの先端部が位置するＬＢＡからＣＲＣエラーを検出したか否かを判定する。更新対象レコードの先端部が位置するＬＢＡからＣＲＣエラーを検出したか否かは、エラー情報に含まれるエラー発生アドレスから計算して判定できる。ＣＡ１４は、更新対象レコードの先端部が位置するＬＢＡからＣＲＣエラーを検出した場合にステップＳ２６にすすみ、更新対象レコードの先端部が位置するＬＢＡからＣＲＣエラーを検出しない場合にステップＳ２９にすすむ。
【０１０２】
［ステップＳ２６］ＣＡ１４は、更新対象レコードの先端部で検出したエラーのリカバリをおこなうレコード先端部リカバリ処理を実行する。レコード先端部リカバリ処理の詳細は、図２３を用いて後で説明する。
【０１０３】
［ステップＳ２７］ＣＡ１４は、さらなるエラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ２８にすすみ、エラー検出がなければステップＳ３１にすすむ。
【０１０４】
［ステップＳ２８］ＣＡ１４は、ステップＳ２７で検出したエラーがＢＣＣによるＣＲＣエラーであるか否かを判定する。ＣＡ１４は、検出したエラーがＣＲＣエラーである場合にステップＳ２９にすすみ、ＣＲＣエラーでない場合にステップＳ３２にすすむ。
【０１０５】
［ステップＳ２９］ＣＡ１４は、更新対象レコードの終端部で検出したエラーのリカバリをおこなうレコード終端部リカバリ処理を実行する。レコード終端部リカバリ処理の詳細は、図２４を用いて後で説明する。
【０１０６】
［ステップＳ３０］ＣＡ１４は、さらなるエラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ３２にすすみ、エラー検出がなければステップＳ３１にすすむ。
【０１０７】
［ステップＳ３１］ＣＡ１４は、リカバリ処理が正常に終了する旨、すなわちリカバリを成功した旨を出力する。これにより、ＣＡ１４は、データライト処理のステップＳ１８で検出したエラーのリカバリの成功を判定できる。ＣＡ１４は、リカバリ処理を終了する。
【０１０８】
［ステップＳ３２］ＣＡ１４は、リカバリ処理がエラー終了する旨、すなわちリカバリを失敗した旨を出力する。これにより、ＣＡ１４は、データライト処理のステップＳ１８で検出したエラーのリカバリの失敗を判定できる。ＣＡ１４は、リカバリ処理を終了する。
【０１０９】
次に、レコード先端部リカバリ処理について図２３を用いて説明する。図２３は、第２の実施形態のレコード先端部リカバリ処理のフローチャートを示す図である。レコード先端部リカバリ処理は、ＣＡ１４がリカバリ処理のステップＳ２６で実行する処理である。
【０１１０】
［ステップＳ４１］ＣＡ１４は、ＲnＣのチェックコードが有効であるか否かを判定する。ＲnＣは、更新対象レコード（レコードｎ：Ｒn）のカウント部（Ｃ）を示す。ＣＡ１４は、カウント部にあるフラグ４を参照することでＲnＣのチェックコードの有効性を判定できる。ＣＡ１４は、ＲnＣのチェックコードが有効である場合にステップＳ４２にすすみ、有効でない場合にステップＳ４４にすすむ。
【０１１１】
［ステップＳ４２］ＣＡ１４は、ＲnＣのチェックコードが有効であることからＲnＣのチェックコードを用いてエラー判定をおこなう。ＣＡ１４は、チェックコードを用いてＲnＣが位置するＨＬＢＡのデータを検証することでエラー判定をおこなう。
【０１１２】
［ステップＳ４３］ＣＡ１４は、エラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ４６にすすみ、エラー検出がなければステップＳ４８にすすむ。このようにして、ストレージ装置１０は、チェックコードによるＨＬＢＡのデータ検証をおこなうことができる。
【０１１３】
［ステップＳ４４］ＣＡ１４は、ＲnＣのチェックコードが有効でないことからＲnＣ、ＲnＫ、およびＲnＤからデータを読み出してＦＣＣによるエラー判定をおこなう。ＲnＫは更新対象レコード（レコードｎ：Ｒn）のキー部（Ｋ）を示し、ＲnＤは更新対象レコード（レコードｎ：Ｒn）のデータ部（Ｄ）を示す。なお、更新対象レコードのフィールドのＦＣＣは、必ずしもレコード先端部のＨＬＢＡにあるとは限らないので、ＦＣＣによるデータ検証は、ＨＬＢＡ単位のデータ検証ができない場合がある。たとえば、ＣＫＤレコードフォーマットパタン（その２）２１１やＣＫＤレコードフォーマットパタン（その３）２１２の場合、ＣＡ１４は、Ｒ＃１のデータ部についてＨＬＢＡ単位のデータ検証ができない。ＣＡ１４は、データ部のＦＣＣによっては、図示しないＨＬＢＡ＃１にあるデータ部の異常と、ＨＬＢＡ＃２にあるデータ部の異常とを判別できない。
【０１１４】
［ステップＳ４５］ＣＡ１４は、エラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ４６にすすみ、エラー検出がなければステップＳ４８にすすむ。このようにして、ストレージ装置１０は、チェックコードによるＨＬＢＡのデータ検証をおこなうことができる。
【０１１５】
［ステップＳ４６］ＣＡ１４は、Ｒn-1ＤのＦＣＣからエラー判定をおこなう。
［ステップＳ４７］ＣＡ１４は、エラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ４８にすすみ、エラー検出がなければステップＳ４９にすすむ。
【０１１６】
［ステップＳ４８］ＣＡ１４は、Ｒn-1Ｄのデータに異常があることを検出したので、Ｒn-1Ｃのフラグ３にＲn-1Ｄのデータ異常を記録する。このように、ストレージ装置１０は、ＬＢＡ内で更新対象レコードと混在する他のレコードのデータ異常を記録することができる。
【０１１７】
［ステップＳ４９］ＣＡ１４は、レコード先端部のエラー検出を無効化する。すなわち、レコード先端部が位置するＬＢＡでおこなうＲＭＷのＣＲＣエラーの検出を抑止する。
［ステップＳ５０］ＣＡ１４は、ＲＭＷにより更新対象レコードのデータをキャッシュメモリ１６に書き込み、レコード先端部リカバリ処理を終了する。
【０１１８】
これにより、更新対象レコードの先端部が位置するＨＬＢＡにエラーがあった場合にも、更新対象レコードの先端部が位置するＨＬＢＡのデータはリカバリされる。また、ＬＢＡ内で更新対象レコードと混在する他のレコードが位置するＨＬＢＡにエラーがあった場合にも、他のレコードのカウント部にエラー情報（異常検出情報）が記録される。
【０１１９】
次に、レコード終端部リカバリ処理について図２４を用いて説明する。図２４は、第２の実施形態のレコード終端部リカバリ処理のフローチャートを示す図である。レコード終端部リカバリ処理は、ＣＡ１４がリカバリ処理のステップＳ２９で実行する処理である。
【０１２０】
［ステップＳ５１］ＣＡ１４は、Ｒn+1Ｃのチェックコードが有効であるか否かを判定する。Ｒn+1Ｃは、更新対象レコードＲnと同じＬＢＡにあり、更新対象レコードＲnの次のＨＬＢＡに位置するレコードのカウント部を示す。ＣＡ１４は、カウント部にあるフラグ４を参照することでＲn+1Ｃのチェックコードの有効性を判定できる。ＣＡ１４は、Ｒn+1Ｃのチェックコードが有効である場合にステップＳ５２にすすみ、有効でない場合にステップＳ５４にすすむ。
【０１２１】
［ステップＳ５２］ＣＡ１４は、Ｒn+1Ｃのチェックコードが有効であることからＲn+1Ｃのチェックコードを用いてエラー判定をおこなう。ＣＡ１４は、チェックコードを用いてＲn+1Ｃが位置するＨＬＢＡのデータを検証することでエラー判定をおこなう。
【０１２２】
［ステップＳ５３］ＣＡ１４は、エラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ５６にすすみ、エラー検出がなければステップＳ５７にすすむ。このようにして、ストレージ装置１０は、チェックコードによるＨＬＢＡのデータ検証をおこなうことができる。
【０１２３】
［ステップＳ５４］ＣＡ１４は、Ｒn+1Ｃのチェックコードが有効でないことからＲn+1Ｃからデータを読み出してＦＣＣによるエラー判定をおこなう。なお、カウント部は、ＨＬＢＡより小さい固定長のフィールドであることから、カウント部は、検証対象のレコード先端部のＨＬＢＡに位置する。
【０１２４】
なお、Ｒn+1Ｋ、およびＲn+1Ｄなど、その他のフィールドは可変長であり、必ずしも検証対象のレコード先端部のＨＬＢＡにあるとは限らないが、カウント部のあるＨＬＢＡ内にある場合に検証対象に含めてもよい。たとえば、ＣＫＤレコードフォーマットパタン（その２）２１１やＣＫＤレコードフォーマットパタン（その３）２１２の場合、ＣＡ１４は、Ｒ＃３のデータ部についてＨＬＢＡ単位のデータ検証ができない。ＣＡ１４は、ＨＬＢＡ＃７にあるカウント部とキー部についてＦＣＣによるエラー判定をおこなうことができる。
【０１２５】
［ステップＳ５５］ＣＡ１４は、エラー検出の有無を判定する。ＣＡ１４は、エラー検出があればステップＳ５６にすすみ、エラー検出がなければステップＳ５７にすすむ。このようにして、ストレージ装置１０は、チェックコードによるＨＬＢＡのデータ検証をおこなうことができる。
【０１２６】
［ステップＳ５６］ＣＡ１４は、Ｒn+1Ｃのデータに異常があることを検出したので、Ｒn+1Ｃのフラグ１にＲn+1Ｃのデータ異常を記録する。このように、ストレージ装置１０は、ＬＢＡ内で更新対象レコードと混在する他のレコードのデータ異常を記録することができる。
【０１２７】
［ステップＳ５７］ＣＡ１４は、レコード終端部のエラー検出を無効化する。すなわち、レコード終端部が位置するＬＢＡでおこなうＲＭＷのＣＲＣエラーの検出を抑止する。
［ステップＳ５８］ＣＡ１４は、ＲＭＷにより更新対象レコードのデータをキャッシュメモリ１６に書き込み、レコード終端部リカバリ処理を終了する。
【０１２８】
これにより、更新対象レコードの終端部が位置するＨＬＢＡにエラーがあった場合にも、更新対象レコードの終端部が位置するＨＬＢＡのデータはリカバリされる。また、ＬＢＡ内で更新対象レコードと混在する他のレコードが位置するＨＬＢＡにエラーがあった場合にも、他のレコードのカウント部にエラー情報（異常検出情報）が記録される。
【０１２９】
なお、ＣＡ１４は、リカバリ処理、レコード先端部リカバリ処理、およびレコード終端部リカバリ処理を実行することで、エラーを検出する検出部、エラーをリカバリするリカバリ部として機能する。また、ＣＡ１４は、データライト処理、データを書き込む書込部、チェックコード（検証情報）を付加する検証情報付加部として機能する。
【０１３０】
次に、データ読出時におこなうデータリード処理について図２５を用いて説明する。図２５は、第２の実施形態のデータリード処理のフローチャートを示す図である。データリード処理は、ＣＡ１４がメインフレームホスト１１からリードＩ／Ｏ（データリード要求）を受け付けて実行する処理である。
【０１３１】
［ステップＳ６１］ＣＡ１４は、キャッシュメモリ１６上からのデータ読出をＣＭ１５に要求する。
［ステップＳ６２］ＣＡ１４は、キャッシュメモリ１６にデータが用意されたのを確認して、読出対象のレコードのカウント部を取得する。
【０１３２】
［ステップＳ６３］ＣＡ１４は、カウント部のフラグ領域にデータ異常フラグがセット（ＯＮ）されているか否かを判定する。ＣＡ１４は、カウント部のフラグ領域にデータ異常フラグがセットされている場合にステップＳ６７にすすみ、データ異常フラグがセットされていない場合にステップＳ６４にすすむ。
【０１３３】
［ステップＳ６４］ＣＡ１４は、読み出したカウント部から、キー部のデータ長とデータ部のデータ長とを取得し、メインフレームホスト１１から要求されたデータをキャッシュメモリ１６から読み出してメインフレームホスト１１に送信する。
【０１３４】
［ステップＳ６５］ＣＡ１４は、ステップＳ６４でおこなったデータ送信が正常に終了したか否かを判定する。ＣＡ１４は、データ送信が正常に終了した場合、すなわちエラーを検出しない場合にステップＳ６６にすすみ、データ送信が正常に終了しない場合、すなわちエラーを検出した場合にステップＳ６７にすすむ。
【０１３５】
［ステップＳ６６］ＣＡ１４は、メインフレームホスト１１にデータリードの正常終了を報告し、データリード処理を終了する。
［ステップＳ６７］ＣＡ１４は、メインフレームホスト１１にエラー（データリードの失敗）を報告し、データリード処理を終了する。
【０１３６】
メインフレームホスト１１は、エラー報告を受け取ると、同じデータのリードをリトライするリカバリをおこなう。メインフレームホスト１１は、リトライを規定回数失敗すると、リトライアウトとしてデータリード失敗を確定する。
【０１３７】
以上に説明した各処理により、ストレージ装置１０は、チェックコードを用いたデータ異常発生位置の判定と、データ異常発生位置に対応するリカバリをおこなうことができる。
【０１３８】
すなわち、ストレージ装置１０は、更新対象レコードのカウント部にチェックコードを付加することにより、更新対象レコードの先端部が位置するＨＬＢＡにエラーがあった場合に、更新対象レコードの先端部が位置するＨＬＢＡのデータをリカバリできる。また、ストレージ装置１０は、ＬＢＡ内で更新対象レコードの先端部と混在する他のレコードが位置するＨＬＢＡにエラーがあった場合にも、他のレコードのカウント部にエラー情報を記録することができる。また、ストレージ装置１０は、他のレコードのカウント部にエラー情報を記録することで、更新対象レコードと混在するレコードにエラーがある場合にも、更新対象レコードにエラーがないことを確認してデータを書き込むことができる。
【０１３９】
また、ストレージ装置１０は、更新対象レコードと混在するレコードのカウント部にチェックコードが付加されていることにより、混在するレコードが位置するＨＬＢＡにエラーがあった場合に、混在するレコードのカウント部にエラー情報を記録することができる。なお、更新対象レコードの終端部のエラーを判定できない場合があるが、ＣＲＣエラーの検出を抑止したＲＭＷによる上書きによりリカバリされ得る。また、ストレージ装置１０は、混在するレコードの他のレコードのカウント部、又はカウント部を含む先端部にエラーがある場合にも、混在するレコードのカウント部にエラー情報を記録することで、更新対象レコードにエラーがないことを確認してデータを書き込むことができる。
【０１４０】
なお、ストレージ装置１０は、チェックコードをカウント部に設けるようにしたが、キャッシュメモリ１６にデータを書き込んだときに、先頭のＨＬＢＡに位置するフィールドであれば、カウント部に限らずキー部などその他のフィールドにチェックコードを設けるものであってもよい。
【０１４１】
なお、ストレージ装置１０は、ＬＢＡを２分割したＨＬＢＡをデータの記憶単位としたが、ＬＢＡを４分割、あるいは８分割など整数で分割した記憶領域を記憶単位とするものであってもよい。たとえば、ＨＤＤ１２のデータ保持単位が４０９６ｂｙｔｅである場合に、キャッシュメモリ１６の記憶単位は、４０９６ｂｙｔｅを８分割した５１２ｂｙｔｅであってもよい。
【０１４２】
なお、ストレージ装置１０は、カウント部にチェックコードを有しない既存のデータを扱うこともできるため、既存のストレージ装置のファームウェアのアップデートにより実現することもできる。この場合、ストレージ装置１０は、データライト時、あるいはデータリード時に、カウント部にチェックコードを付加することができ、アクセスのあったデータから順次チェックコードを付加することができる。
【０１４３】
次に、第２の実施形態のＣＡ１４のハードウェア構成について図２６を用いて説明する。図２６は、第２の実施形態のＣＡのハードウェア構成の一例である。
ＣＡ１４は、プロセッサ２０によって装置全体が制御されている。プロセッサ２０には、バス２５を介してＲＡＭ（Random Access Memory）２１と複数の周辺機器が接続されている。プロセッサ２０は、マルチプロセッサであってもよい。プロセッサ２０は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ２０は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【０１４４】
ＲＡＭ２１は、ＣＡ１４の主記憶装置として使用される。ＲＡＭ２１には、プロセッサ２０に実行させるＯＳのプログラムやファームウェア、アプリケーションプログラム（制御プログラムなど）の少なくとも一部が一時的に格納される。また、ＲＡＭ２１には、プロセッサ２０による処理に必要な各種データが格納される。また、ＲＡＭ２１は、各種データの格納に用いるメモリと別体にキャッシュメモリを含むものであってもよい。
【０１４５】
バス２５に接続されている周辺機器としては、不揮発性メモリ２２、入出力インタフェース２４、および通信インタフェース２３がある。
不揮発性メモリ２２は、ＣＡ１４の電源遮断時においても記憶内容を保持する。不揮発性メモリ２２は、たとえば、ＥＥＰＲＯＭやフラッシュメモリなどの半導体記憶装置や、ＨＤＤなどである。また、不揮発性メモリ２２は、ＣＡ１４の補助記憶装置として使用される。不揮発性メモリ２２には、オペレーティングシステムのプログラムやファームウェア、アプリケーションプログラム、および各種データが格納される。
【０１４６】
入出力インタフェース２４は、図示しない入出力装置と接続して入出力をおこなう。
通信インタフェース２３は、ＣＨ１３と接続する。
以上のようなハードウェア構成によって、第２の実施形態のＣＡ１４の処理機能を実現することができる。なお、ＣＡ１４の他、ＣＭ１５、第１の実施形態に示したストレージ制御装置１も、図示したＣＡ１４と同様のハードウェアにより実現することができる。
【０１４７】
ＣＡ１４は、たとえばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施形態の処理機能を実現する。ＣＡ１４に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、ＣＡ１４に実行させるプログラムを不揮発性メモリ２２に格納しておくことができる。プロセッサ２０は、不揮発性メモリ２２内のプログラムの少なくとも一部をＲＡＭ２１にロードし、プログラムを実行する。またＣＡ１４に実行させるプログラムを、図示しない光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体に記録しておくこともできる。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。メモリ装置は、入出力インタフェース２４あるいは図示しない機器接続インタフェースとの通信機能を搭載した記録媒体である。たとえば、メモリ装置は、メモリリーダライタによりメモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しをおこなうことができる。メモリカードは、カード型の記録媒体である。
【０１４８】
可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ２０からの制御により、不揮発性メモリ２２にインストールされた後、実行可能となる。またプロセッサ２０が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【０１４９】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置１、ストレージ装置１０（ＣＡ１４、ＣＭ１５）が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１５０】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１５１】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１５２】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
以上の実施の形態に関し、更に以下の付記を開示する。
【０１５３】
（付記１）  所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置であって、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込む書込部と、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する検証情報付加部と、
を備えることを特徴とするストレージ制御装置。
【０１５４】
（付記２）  前記書込部は、前記１以上の分割領域のうちの先頭または末尾に位置する分割領域のデータが前記固定長データフォーマットのデータの一部となる場合に、前記固定長データフォーマットのデータを前記外部装置から読み出して前記固定長データフォーマットのデータの一部となるデータを上書きして前記分割領域に書込むことを特徴とする付記１記載のストレージ制御装置。
【０１５５】
（付記３）  前記検証情報を付加する所定のフィールドは、固定長であって、前記１以上の分割領域のうちの先頭の分割領域に位置することを特徴とする付記２記載のストレージ制御装置。
【０１５６】
（付記４）  前記先頭の分割領域のデータが、前記固定長データフォーマットのデータの一部となる場合に、前記検証情報にもとづいて前記先頭の分割領域のデータの異常を検出する検出部を備えることを特徴とする付記３記載のストレージ制御装置。
【０１５７】
（付記５）  前記検出部は、前記固定長データフォーマットのデータのうち前記先頭の分割領域のデータを除く既存データの異常を検出した場合に、前記既存データにおける前記所定のフィールドに異常検出情報を付加することを特徴とする付記４記載のストレージ制御装置。
【０１５８】
（付記６）  前記１以上の分割領域のうちの末尾の分割領域のデータが、前記固定長データフォーマットのデータの一部となる場合に、前記固定長データフォーマットのデータのうち前記末尾の分割領域のデータを除く既存データの前記検証情報にもとづいて前記既存データの異常を検出する検出部を備えることを特徴とする付記３記載のストレージ制御装置。
【０１５９】
（付記７）  前記検出部は、前記既存データの異常を検出した場合に、前記既存データにおける前記所定のフィールドに異常検出情報を付加することを特徴とする付記６記載のストレージ制御装置。
【０１６０】
（付記８）  前記検出部が前記書込部による書込対象のデータの異常を検出した場合に、前記書込対象のデータの上書きによりリカバリをおこなうリカバリ部を備えることを特徴とする付記１乃至付記７のいずれか１つに記載のストレージ制御装置。
【０１６１】
（付記９）  前記可変長データフォーマットは、カウント部、キー部、およびデータ部を含み、前記所定のフィールドは、前記カウント部であることを特徴とする付記１記載のストレージ制御装置。
【０１６２】
（付記１０）  前記検証情報付加部は、前記フィールド単位に設定される第２の検証情報と独立して前記検証情報を付加することを特徴とする付記１記載のストレージ制御装置。
【０１６３】
（付記１１）  所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置の制御プログラムであって、
コンピュータに、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込む処理と、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する処理と、
を実行させることを特徴とするストレージ制御装置の制御プログラム。
【０１６４】
（付記１２）  所定のフィールドからなる可変長データフォーマットのデータを、固定長データフォーマットのデータに変換して、変換した前記固定長データフォーマットのデータを記憶装置に記憶させるストレージ制御装置の制御方法であって、
コンピュータが、
前記可変長データフォーマットのデータを、データ蓄積用メモリにおける前記固定長データを分割した分割データ長の１以上の連続した分割領域に書き込むときに、
前記１以上の分割領域に書き込まれる前記可変長データフォーマットの所定フィールドに、前記所定フィールドが位置する前記分割領域内のデータ異常を検証可能にする検証情報を付加する、
処理を実行することを特徴とするストレージ制御装置の制御方法。
【符号の説明】
【０１６５】
１  ストレージ制御装置
１ａ  データ蓄積用メモリ
１ｂ  書込部
１ｃ  検証情報付加部
２  外部装置
３  記憶装置
４  可変長データフォーマット
４ａ，４ｂ，４ｃ  フィールド
５  固定長データフォーマット
６，６ａ，６ｂ，６ｃ，６ｄ  分割領域
７，７ａ，７ｂ，７ｃ，７ｄ，７ｅ  データ
８  検証情報
１０  ストレージ装置
１１  メインフレームホスト
１２  ＨＤＤ
１３  ＣＨ
１４  ＣＡ
１５  ＣＭ
１６  キャッシュメモリ
１７  内部バス
２０  プロセッサ
２１  ＲＡＭ
２２  不揮発性メモリ
２３  通信インタフェース
２４  入出力インタフェース
２５  バス
【図１】
2015106372.tif 000003
【図２】
2015106372.tif 000004
【図３】
2015106372.tif 000005
【図４】
2015106372.tif 000006
【図５】
2015106372.tif 000007
【図６】
2015106372.tif 000008
【図７】
2015106372.tif 000009
【図８】
2015106372.tif 000010
【図９】
2015106372.tif 000011
【図１０】
2015106372.tif 000012
【図１１】
2015106372.tif 000013
【図１２】
2015106372.tif 000014
【図１３】
2015106372.tif 000015
【図１４】
2015106372.tif 000016
【図１５】
2015106372.tif 000017
【図１６】
2015106372.tif 000018
【図１７】
2015106372.tif 000019
【図１８】
2015106372.tif 000020
【図１９】
2015106372.tif 000021
【図２０】
2015106372.tif 000022
【図２１】
2015106372.tif 000023
【図２２】
2015106372.tif 000024
【図２３】
2015106372.tif 000025
【図２４】
2015106372.tif 000026
【図２５】
2015106372.tif 000027
【図２６】
2015106372.tif 000028