(57)【特許請求の範囲】
【請求項１】
デバイスコントローラと不揮発性記憶媒体を有する複数の記憶デバイスと、ストレージコントローラとを有し、
前記記憶デバイスは前記ストレージコントローラに記憶空間を提供するよう構成されており、前記記憶空間は複数のセクタを有し、前記複数のセクタのそれぞれは、ライトデータ格納領域と前記ライトデータ格納領域に格納されたデータの検査用コードの格納領域から成り、
前記記憶デバイスは、前記複数のセクタのうち、前記ストレージコントローラからの書き込みが行われていない第一セクタに対するリード要求を前記ストレージコントローラから受領した場合、
所定のパターンのデータと、前記検査用コードとを生成し、前記所定のパターンのデータに前記検査用コードを付加した情報を前記ストレージコントローラに返送し、
前記記憶デバイスは、前記セクタに対するライト要求を受領すると、前記セクタに前記不揮発性記憶媒体の記憶領域をマッピングし、前記マッピングされた記憶領域に、ホスト計算機から受領したライトデータと前記検査用コードを格納し、前記セクタに前記ライトデータが書き込まれた旨と前記セクタにマッピングされた前記記憶領域の情報をマッピング情報に記録し、
前記複数のセクタのうち、過去に前記ストレージコントローラからの書き込みが行われたセクタに対するリード要求を受領した時、
前記セクタにマッピングされた前記記憶領域に格納されたデータを、前記ストレージコントローラに返送する、
ことを特徴とする、ストレージ装置。
【請求項２】
前記検査用コードには、前記ライトデータ格納領域に格納されるデータを用いて生成される誤り検出符号と、前記データの格納位置に関する情報が含まれる、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、ホスト計算機から前記ライト要求と前記ライトデータを受領すると、前記ライト要求に含まれる位置情報と前記ライトデータに基づいて、前記検査用コードを生成し、前記ライトデータに前記検査用コードを付加して前記記憶デバイスに送信し、
前記記憶デバイスは、前記ライトデータと前記検査用コードを前記不揮発性記憶媒体に格納する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記デバイスコントローラは、前記ストレージコントローラから初期化指示を受領すると、前記マッピング情報をクリアする、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項５】
前記不揮発性記憶媒体は、データの消去単位であるブロックを複数有するフラッシュメモリであって、
前記デバイスコントローラは、前記初期化指示を受領すると、複数の前記ブロックのうち、所定数の前記ブロックの消去を行った後、
前記ストレージコントローラに、前記初期化指示に係る処理が完了した旨を返答する
ことを特徴とする、請求項４に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、前記複数の記憶デバイスの有する記憶空間を用いて１以上の論理的記憶空間を形成し、
前記ストレージコントローラは前記検査用コードを生成する時、前記論理的記憶空間の識別子を前記検査用コードに格納するよう構成されており、
前記記憶デバイスは、前記ストレージコントローラから前記初期化指示を受領する時に、前記記憶デバイスの属する前記論理的記憶空間の識別子を受領し、
前記記憶デバイスが前記検査用コードを生成する時、前記受領した識別子を前記検査用コードに格納する、
ことを特徴とする、請求項４に記載のストレージ装置。
【請求項７】
デバイスコントローラと不揮発性記憶媒体を有し、ストレージ装置に接続される記憶デバイスであって、
前記デバイスコントローラは前記ストレージ装置に複数のセクタを有する記憶空間を提供するよう構成されており、前記複数のセクタのそれぞれは、ライトデータ格納領域と前記ライトデータ格納領域に格納されたデータの検査用コードの格納領域から構成されており、
前記デバイスコントローラは、前記複数のセクタのうち、前記ストレージ装置からの書き込みが行われていない第一セクタに対するリード要求を前記ストレージ装置から受領した時、
所定のパターンのデータと、前記検査用コードを生成し、前記所定のパターンのデータに前記検査用コードを付加した情報を前記ストレージ装置に返送し、
前記デバイスコントローラは、前記セクタに対するライト要求を受領すると、前記セクタに前記不揮発性記憶媒体の記憶領域をマッピングし、前記マッピングされた記憶領域に、ホスト計算機から受領したライトデータと前記検査用コードを格納し、前記セクタに前記ライトデータが書き込まれた旨と前記セクタにマッピングされた前記記憶領域の情報をマッピング情報に記録し、
前記複数のセクタのうち、過去に前記ストレージ装置からの書き込みが行われたセクタに対するリード要求を受領した時、
前記セクタにマッピングされた前記記憶領域に格納されたデータを、前記ストレージ装置に返送する、
ことを特徴とする、記憶デバイス。
【請求項８】
前記検査用コードには、前記ライトデータ格納領域に格納されるデータを用いて生成される誤り検出符号と、前記データの格納位置に関する情報が含まれる、
ことを特徴とする、請求項７に記載の記憶デバイス。
【請求項９】
前記デバイスコントローラは、前記ストレージ装置から初期化指示を受領すると、前記マッピング情報をクリアする、
ことを特徴とする、請求項７に記載の記憶デバイス。
【請求項１０】
前記不揮発性記憶媒体は、データの消去単位であるブロックを複数有するフラッシュメモリであって、
前記デバイスコントローラは、前記初期化指示を受領すると、複数の前記ブロックのうち、所定数の前記ブロックの消去を行った後、
前記ストレージ装置に、前記初期化指示に係る処理が完了した旨を返答する
ことを特徴とする、請求項９に記載の記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリを用いたストレージ装置に関する。
【背景技術】
【０００２】
ＩＴの進歩やインターネットの普及などにより、企業等における計算機システムが扱うデータ量は増加を続けている。そのため、大量のデータを扱う組織で用いられるストレージシステムも大容量化が進んでいる。【０００３】
ストレージシステムを使い始める時には、ストレージシステムに搭載される複数の記憶デバイスの初期化（フォーマット）を行う必要がある。初期化の際、記憶デバイスの全記憶領域に対して所定のパターンのデータ（たとえばａｌｌ  ｚｅｒｏ）の書き込みが行われる。そのためストレージシステムの大容量化が進むにつれ、初期化にはきわめて長い時間が必要になってきている。初期化が完了するまでは、ストレージシステムが使用できないため、初期化に長時間を要することはシステムにとって好ましいことではない。【０００４】
この問題を解決するために、たとえば特許文献１には、ホストからのI/O要求を受け付けながら、ディスクドライブの初期化を行うストレージシステムが開示されている。この初期化方法では、バックグラウンドで初期化を実行し、初期化によりａｌｌ  ｚｅｒｏ等の所定のデータパターンが書き込まれる。ホストI/Oが来ると、I/O対象領域が初期化済みの場合には、その領域に対して通常のI/Oを行う。初期化済でない場合には、I/Oがライトの場合には初期化後にデータを書き込み、I/Oがリードの場合には、初期化データをホストに返送する。これらの処理は、ストレージコントローラ、またはディスクドライブで実施される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７４６１１７６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで高い信頼性を要求されるストレージシステムの中には、記憶デバイスへのデータライト時に、データとともに、データの妥当性検証を可能にするための、検査用コードを格納することがある。このようなストレージシステムでは、記憶領域上に、データを記憶する領域に加えて、検査用コードを格納するフィールド(DIF  (Data  Integrity  Field)と呼ばれる)が設けられている。そしてデータライト時にストレージシステムが検査用コードを生成し、ＤＩＦに検査用コードを格納する。一般に検査用コードには、ライトデータをもとに算出される誤り検出符号と、データアクセス位置の妥当性検証を可能にするための情報（データ格納先アドレスをもとに算出される情報）が格納されるため、検査用コードの内容は、データの格納位置によって異なり得る。【０００７】
特許文献１に開示されているような初期化技術では、あらかじめ定められたデータパターンを記憶領域に書き込むことは可能であるが、データ格納位置によって異なる情報を格納することは考慮されていない。そのため、高い信頼性を要求されるストレージシステムに、特許文献１に開示の技術を導入することは困難である。
【課題を解決するための手段】
【０００８】
本発明の一観点に係るストレージ装置は、複数の記憶デバイスとストレージコントローラを有する。記憶デバイスは、複数のセクタを有する記憶空間をストレージコントローラに提供しており、各セクタはライトデータ格納領域と検査用コード格納領域から構成される。記憶デバイスがストレージコントローラからリード要求を受領した時、リード対象のセクタが未書き込みの場合、リード要求に含まれている情報に基づいて検査用コードを生成し、ストレージコントローラには、所定のパターンのデータと検査用コードを送信する。
【発明の効果】
【０００９】
本発明によれば、記憶デバイスに対する初期化処理を実質的に不要にすることができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施例に係るストレージシステムを含む計算機システムのハードウェア構成図である。
【図２】ＦＭＰＫの構成図である。
【図３】ＲＡＩＤグループの説明図である。
【図４】データフォーマットの一例である。
【図５】論理物理マッピングテーブルの構成を説明する図である。
【図６】空きページリストの構成を説明する図である。
【図７】未初期化ブロックリストの構成を説明する図である。
【図８】初期化処理のフローチャートである。
【図９】ライト処理のフローチャートである。
【図１０】リード処理のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
また、以後の説明では「ａａａテーブル」等の表現にて本発明の情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことがある。また、「ｂｂｂ名」等の表現にて本発明の「ｂｂｂ」を識別するための情報を説明する場合があるが、これらの識別するための情報は、名前に限られず、識別子や識別番号、アドレスなど、「ｂｂｂ」が特定できる情報であればよい。
【００１３】
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、実際には、プログラムはプロセッサ（ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、プロセッサが定められた処理をメモリ及びＩ／Ｆ（インタフェース）を用いながら行う。ただし説明が冗長になることを防ぐため、プログラムを主語として説明することがある。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各装置にインストールされてもよい。記憶メディアとしては、例えば、ＩＣカード、ＳＤカード、ＤＶＤ等であってもよい。
【００１４】
図１は、実施例に係るストレージシステム１を含む計算機システムの構成を示す。ストレージシステム（ストレージ装置とも呼ばれる）１は、ストレージコントローラ（ＤＫＣと表記することもある）１０と、ストレージコントローラ１０に接続された複数の記憶デバイス（２００、２００’）を有する。
【００１５】
記憶デバイス（２００、２００’）は、ホスト２などの上位装置からのライトデータを格納するために用いられる。本実施例のストレージシステム１は、記憶デバイスとして、磁気ディスクを記録媒体とするＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）の他、フラッシュメモリなどの不揮発性半導体メモリを記憶媒体として用いた記憶装置であるＦＭＰＫ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  ＰａｃＫａｇｅ）を用いることができる。ＦＭＰＫの具体的な構成については後述する。
【００１６】
本実施例では、記憶デバイス２００’がＨＤＤで、記憶デバイス２００がＦＭＰＫである例を説明する。そのため記憶デバイス２００のことを「ＦＭＰＫ２００」と呼び、また記憶デバイス２００’のことを「ＨＤＤ２００’」と呼ぶこともある。ただし、記憶デバイス（２００，２００’）として、ＨＤＤやＦＭＰＫ以外の種類の記憶デバイスを用いてもよい。また本実施例では、記憶デバイス（２００、２００’）はＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格に従って、ストレージコントローラ１０との通信を行う。
【００１７】
ＤＫＣ１０には、１以上のホスト２が接続される。ＤＫＣ１０とホスト２とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）３を介して接続される。
【００１８】
ＤＫＣ１０は少なくとも、プロセッサ１１、ホストインタフェース（図中では「ホストＩＦ」と表記）１２、デバイスインタフェース（図中では「デバイスＩＦ」と表記）１３、メモリ１４、パリティ演算回路１５を有する。そしてプロセッサ１１、ホストＩＦ１２、デバイスＩＦ１３、メモリ１４、パリティ演算回路１５は、相互結合スイッチ（相互結合ＳＷ）１６を介して相互接続されている。これらの構成要素は、高性能化及び高可用性の確保のため、ＤＫＣ１０内に複数搭載されていてよい。ただしこれらの構成要素が１つだけＤＫＣ１０内に設けられている構成でもよい。
【００１９】
デバイスＩＦ１３は少なくとも、記憶デバイス２００、２００’と通信するためのインタフェースコントローラ１３１（図中では「ＳＡＳ−ＣＴＬ」と表記されている）、及び転送回路（非図示）を有する。インタフェースコントローラ１３１は、記憶デバイス２００、２００’で用いられているプロトコル（一例ではＳＡＳ）を、ＤＫＣ１０内部で用いられている通信プロトコル（一例としてＰＣＩ−Ｅｘｐｒｅｓｓ）に変換するためのものである。本実施例では、記憶デバイス２００、２００’がＳＡＳ規格に従った通信を行うため、インタフェースコントローラ１３１にはＳＡＳコントローラ（以下、「ＳＡＳ−ＣＴＬ」と略記する）が用いられる。図１では、１つのデバイスＩＦ１３にＳＡＳ−ＣＴＬ１３１が１つのみ記載されているが、１つのデバイスＩＦ１３に複数のＳＡＳ−ＣＴＬ１３１が存在する構成を採用してもよい。
【００２０】
ホストＩＦ１２は、デバイスＩＦ１３と同様に、インタフェースコントローラと転送回路（非図示）を少なくとも有する。インタフェースコントローラは、ホスト２とＤＫＣ１０間で用いられている通信プロトコル（たとえばファイバチャネル）を、ＤＫＣ１０内部で用いられている通信プロトコルに変換するためのものである。
【００２１】
パリティ演算回路１５は、ＲＡＩＤ技術で必要とされる冗長データ（パリティ）の生成を行うハードウェアである。パリティ演算回路１５により生成される冗長データの例としては、排他的論理和（ＸＯＲ）、リードソロモン符号等がある。
【００２２】
プロセッサ１１は、ホストＩＦ１２から到来するＩ／Ｏ要求の処理等を行う。メモリ１４は、プロセッサ１１が実行するプログラムや、プロセッサ１１が使用するストレージシステム１の各種管理情報を記憶するために用いられる。またメモリ１４は、記憶デバイス（２００、２００’）に対するＩ／Ｏ対象データを一時的に記憶するためにも用いられる。メモリ１４はＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体で構成されるが、別の実施形態として、不揮発性メモリを用いてメモリ１４を構成してもよい。
【００２３】
先に述べたとおり、本実施例に係るストレージシステム１は、ＦＭＰＫ２００、ＨＤＤ２００’等の、複数種類の記憶デバイスを搭載できる。ただし以下では特に断りのない限り、ストレージシステム１にＦＭＰＫ２００のみが搭載されている構成を前提として説明する。
【００２４】
図２を用いて、ＦＭＰＫ２００の構成について説明する。ＦＭＰＫ２００は、デバイスコントローラ（ＦＭコントローラ）２０１と複数のＦＭチップ２１０から構成される。ＦＭコントローラ２０１は、メモリ２０２、プロセッサ２０３、データの圧縮伸長を行うための圧縮伸長回路２０４、フォーマットデータを生成するためのフォーマットデータ生成回路２０５、ＳＡＳ−ＣＴＬ２０６、ＦＭ−ＩＦ２０７を備える。メモリ２０２、プロセッサ２０３、圧縮伸長回路２０４、フォーマットデータ生成回路２０５、ＳＡＳ−ＣＴＬ２０６、ＦＭ−ＩＦ２０７は、内部接続スイッチ（内部接続ＳＷ）２０８を介して相互接続されている。
【００２５】
ＳＡＳ−ＣＴＬ２０６は、ＦＭＰＫ２００とＤＫＣ１０間の通信を行うためのインタフェースコントローラである。ＳＡＳ−ＣＴＬ２０６は、伝送線（ＳＡＳリンク）を介して、ＤＫＣ１０のＳＡＳ−ＣＴＬ１３１に接続される。またＦＭ−ＩＦ２０７は、ＦＭコントローラ２０１とＦＭチップ２１０間の通信を行うためのインタフェースコントローラである。
【００２６】
プロセッサ２０３は、ＤＫＣ１０から到来する各種コマンドに係る処理を行う。メモリ２０２は、プロセッサ２０３が実行するプログラムや、各種管理情報が記憶される。メモリ２０２には、ＤＲＡＭ等の揮発性メモリが用いられる。ただしメモリ２０２に不揮発性メモリを使用しても良い。
【００２７】
圧縮伸長回路２０４は、データの圧縮、または圧縮されたデータの伸長を行う機能を備えたハードウェアである。なお、圧縮伸長回路２０４に代えて、プロセッサ２０３でデータ圧縮用プログラムを実行させることでデータ圧縮を行ってもよい。また、データをＦＭチップ２１０に格納する際に圧縮を行わない場合には、圧縮伸長回路２０４は不要である。
【００２８】
フォーマットデータ生成回路２０５は、初期化データの生成を行うためのハードウェアである。またフォーマットデータ生成回路２０５に代えて、プロセッサ２０３でフォーマットデータ生成回路２０５と同等の処理を実行するプログラムを実行させることで、プロセッサ２０３にフォーマットデータ生成回路２０５の代わりをさせてもよい。
【００２９】
ＦＭチップ２１０は、たとえばＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリチップである。フラッシュメモリは周知のとおり、ページ単位でデータの読み出し・書き込みが行われ、またデータ消去は、複数ページの集合であるブロック単位で行われる。そして一度書き込みが行われたページは上書きが出来ず、一度書き込みが行われたページに対して再度書き込みを行うためには、当該ページを含むブロック全体を消去する必要がある。そのため、ＦＭＰＫ２００は、ＦＭＰＫ２００が接続されるＤＫＣ１０に対しては、ＦＭチップ２１０の有する記憶領域をそのまま提供することはせず、論理的な記憶空間を提供する。
【００３０】
続いて、ストレージシステム１で用いられる記憶領域の概念について説明する。ストレージシステム１は、複数のＦＭＰＫ２００を用いてＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ／Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを形成する。そしてＲＡＩＤグループ内で１つ（あるいは２つ）のＦＭＰＫ２００に障害が発生した場合に、残りのＦＭＰＫ２００内のデータを用いて、障害が発生したＦＭＰＫ２００に格納されていたデータを復旧できるようにしている。また、ＲＡＩＤグループ内の一部の記憶領域（あるいは全記憶領域）を、論理ボリュームとして、ホスト２などの上位装置に提供する。
【００３１】
ＲＡＩＤグループ内の記憶領域について、図３を用いて説明する。図３において、ＦＭＰＫ＃０〜ＦＭＰＫ＃３はそれぞれ、ＦＭＰＫ２００（２００−０〜２００−３）がＤＫＣ１０に提供している記憶空間を表している。ＤＫＣ１０は、複数（図３の例では４つ）のＦＭＰＫ２００から１つのＲＡＩＤグループ２０を構成し、ＲＡＩＤグループ２０に所属する各ＦＭＰＫ（ＦＭＰＫ＃０（２００−０）〜ＦＭＰＫ＃３（２００−３））上の記憶空間を、ストライプブロックと呼ぶ複数の固定サイズの記憶領域に分割して管理している。
【００３２】
また図３では、ＲＡＩＤグループ２０のＲＡＩＤレベル（ＲＡＩＤ技術におけるデータ冗長化方式を表すもので、一般的にはＲＡＩＤ１〜ＲＡＩＤ６のＲＡＩＤレベルがある）がＲＡＩＤ５である場合の例を表している。図３においてＲＡＩＤグループ２０内の、「０」、「１」、「Ｐ」などのボックスがストライプブロックを表しており、ストライプブロックのサイズはたとえば、６４ＫＢ、２５６ＫＢ、５１２ＫＢなどである。また、各ストライプブロックに付されている、「１」等の番号のことを、「ストライプブロック番号」と呼ぶ。
【００３３】
図３で、ストライプブロックのうち、「Ｐ」と記載されているストライプブロックは、冗長データの格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、数字（０、１等）が記載されているストライプブロックは、ホスト２等の上位装置から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。
【００３４】
図３に示されたＲＡＩＤグループ２０では、たとえばＦＭＰＫ＃３（２００−３）の先頭に位置するストライプブロックはパリティストライプ３０１−３である。そしてＤＫＣ１０がこのパリティストライプ３０１−３に格納される冗長データを作成する際、各ＦＭＰＫ２００（ＦＭＰＫ＃０（２００−０）〜ＦＭＰＫ＃２（２００−２））の先頭に位置するデータストライプ（ストライプブロック３０１−０、３０１−１、３０１−２）に格納されるデータに対して所定の演算（たとえば排他的論理和（ＸＯＲ）等）を施すことによって、冗長データを生成する。
【００３５】
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセット（たとえば図３中の要素３００）のことを、「ストライプライン」と呼ぶ。本実施例に係るストレージシステム１の場合、図３に示されているストライプライン３００のように、１つのストライプラインに属する各ストライプブロックは、ＦＭＰＫ２００−０〜２００−３の記憶空間の同じ位置（アドレス）に存在するという規則で、ストライプラインが構成される。
【００３６】
なお、先に説明したストライプブロック番号は、データストライプに付される番号で、ＲＡＩＤグループ内で一意な番号である。図３に示されているように、ＤＫＣ１０は、ＲＡＩＤグループ内の先頭のストライプラインに含まれるデータストライプの各々に０、１、２の番号を付す。またそれ以降のストライプラインに含まれるデータストライプにも、図３に示されているように３、４、５．．．の連続番号が付される。以下、ストライプブロック番号がｎ番（ｎは０以上の整数値）であるデータストライプのことを、「データストライプｎ」と表記する。
【００３７】
本実施例に係るストレージシステム１は、ＲＡＩＤグループ２０の記憶領域を分割して管理する。分割された各記憶領域のことを、仮想デバイス（ＶＤＥＶ）と呼ぶ。なお、１つのＲＡＩＤグループ２０の全記憶領域が１つのＶＤＥＶとして管理されてもよい。各ＶＤＥＶにはストレージシステム１内で一意な識別番号が付される。この識別番号を、ＶＤＥＶ番号（またはＶＤＥＶ＃）と呼ぶ。またＶＤＥＶ＃がｎのＶＤＥＶのことを「ＶＤＥＶ＃ｎ」と表記する。また、本実施例では、ＶＤＥＶ＃は０以上６５５３５以下の整数値、つまり１６ビットの２進数で表現可能な範囲の値とする。
【００３８】
さらに本実施例に係るストレージシステム１は、ＶＤＥＶの記憶領域を分割し、分割された記憶領域からパリティストライプを除いた記憶領域をホスト２に提供する。このホスト２に提供される記憶領域を、論理デバイス（ＬＤＥＶ）と呼ぶ。ＶＤＥＶと同様、各ＬＤＥＶにもストレージシステム１内で一意な識別子が付される。この識別子を、ＬＤＥＶ番号（またはＬＤＥＶ＃）と呼ぶ。ホスト２がストレージシステム１に対してデータのライトまたはリードを行う際、ＬＤＥＶ＃（またはＬＵＮなどの、ＬＤＥＶの識別子を導出可能な情報）を指定したライトコマンドまたはリードコマンドを発行する。
【００３９】
コマンド（ライトコマンドまたはリードコマンド）には、ＬＤＥＶ＃の他、ＬＤＥＶ内のアクセス対象領域のアドレス（以下、このアドレスを「ＬＤＥＶ  ＬＢＡ」と呼ぶ）も含まれている。ＤＫＣ１０はリードコマンドを受領すると、ＬＤＥＶ＃とＬＤＥＶ  ＬＢＡを、ＶＤＥＶ＃とＶＤＥＶの記憶空間上アドレス（以下、これを「ＶＤＥＶ  ＬＢＡ」と呼ぶ）に変換する。さらにＤＫＣ１０は、ＶＤＥＶ＃及びＶＤＥＶ  ＬＢＡから、ＦＭＰＫ２００の識別子とＦＭＰＫ２００上のアドレス（このアドレスを「ＦＭＰＫ  ＬＢＡ」と呼ぶ）を算出し、この算出されたＦＭＰＫ  ＬＢＡを用いて、ＦＭＰＫ２００からデータを読み出す。
【００４０】
またＤＫＣ１０はライトコマンドを受領した時には、ライト対象データの格納されるべきＦＭＰＫ２００のＦＭＰＫ  ＬＢＡに加えて、ライト対象データに対応するパリティの格納されるべきＦＭＰＫ２００のＦＭＰＫ  ＬＢＡも算出する。
【００４１】
続いてＦＭＰＫ２００に格納されるデータのフォーマットについて説明する。ホスト２がＬＤＥＶ内の記憶空間に格納されているデータにアクセスするときの最小単位は、一例として５１２バイトである。ストレージコントローラ１０がホスト２からＬＤＥＶに対するライトコマンドとライトデータを受領すると、ストレージコントローラ１０は５１２バイトのデータ毎に、８バイトの検査用コードを付加する。本実施例では、この検査用コードのことをＤＩＦと呼ぶ。本実施例では、５１２バイトのデータとそれに付加されるＤＩＦから成る５２０バイトのデータの塊（ｃｈｕｎｋ）、またはこの５２０バイトのチャンクの格納される領域のことを、「セクタ」と呼ぶ。
【００４２】
セクタのフォーマットについて、図４を用いて説明する。セクタはデータ５１０とＤＩＦ５１１から成る。データ５１０はホスト２から受領したライトデータが格納される領域で、ＤＩＦ５１１はストレージコントローラ１０によって付加されるＤＩＦが格納される領域である。
【００４３】
ＤＩＦ５１１には、ＣＲＣ５１２、ＬＡ５１３、ＡＰＰ５１４という３種類の情報が含まれる。ＣＲＣ５１２は、データ５１０に所定の演算を施すことで生成される誤り検出符号（一例としてＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）が用いられる）で、２バイトの情報である。
【００４４】
ＬＡ５１３はデータの格納位置に基づいて生成される５バイトの情報である。ＬＡ５１３の先頭バイト（以下これを「ＬＡ０（５１３−０）」と呼ぶ）には、データ５１０の格納先のＶＤＥＶのＶＤＥＶ＃を加工した情報が格納される。残りの４バイト（これを「ＬＡ１（５１３−１）」と呼ぶ）には、データ５１０の格納先アドレス（ＦＭＰＫ  ＬＢＡ）を加工した情報が記録される。ストレージコントローラ１０がホスト２からライト要求を受領すると、ストレージコントローラ１０はライト要求に含まれているデータ書き込み先アドレスＬＢＡをもとに、ライトデータ格納先のＶＤＥＶ＃、ライトデータ格納先のＦＭＰＫ及びＦＭＰＫ  ＬＢＡを特定することで、ＬＡ０（５１３−０）、ＬＡ１（５１３−１）に格納すべき情報を生成する。
【００４５】
ＡＰＰ５１４も誤り検出符号の一種で、１バイトの情報である。ＡＰＰ５１４は、データ５１０とＣＲＣ５１２とＬＡ５１３の各バイトの排他的論理和である。
【００４６】
ストレージコントローラ１０がＦＭＰＫ２００からデータを読み出す時、データ５１０とＤＩＦ５１１の両方がストレージコントローラ１０に返送される。ストレージコントローラ１０はデータ５１０に所定の演算を施してＣＲＣを算出する。そして算出されたＣＲＣと、ＤＩＦ５１１内のＣＲＣ５１２とが一致するか判定する（以下、この判定のことを「ＣＲＣチェック」と呼ぶ）。両者が一致しない場合、ＦＭＰＫ２００からデータが転送されてくる過程において、障害等の要因でデータ内容が変更されたことを意味する。そのため両者が一致しなかった場合には、ストレージコントローラ１０は、データが正しく読み出せなかったと判断する。
【００４７】
またストレージコントローラ１０はＦＭＰＫ２００からデータを読み出すと、ＬＡ０（５１３−０）に含まれている情報と、リード対象データの属するＶＤＥＶ＃が一致するか判定する。またＦＭＰＫ２００に対して発行したリードコマンドに含まれるアドレス（ＦＭＰＫ  ＬＢＡ）等に所定の演算（後述）を施し、ＬＡ１（５１３−１）と一致するか判定する（以下、この判定のことを「ＬＡチェック」と呼ぶ）。両者が一致しない場合、ストレージコントローラ１０は、データが正しく読み出せなかったと判断する。
【００４８】
続いて、ＦＭＰＫ２００の有する管理情報、及びＦＭＰＫ２００で実行されるプログラムについて説明する。まず管理情報について説明する。ＦＭＰＫ２００は少なくとも、論理物理マッピングテーブル６００、空きページリスト７００、未初期化ブロックリスト８００の管理情報を有する。
【００４９】
図５は論理物理マッピングテーブル６００の構成例である。論理物理マッピングテーブル６００は、論理ページ＃６０１、ＬＢＡ６０２、割当状態６０３、ブロック＃６０４、物理ページ＃６０５のカラムを有する。各レコードには、ＦＭＰＫ２００のセクタについての情報が格納される。論理物理マッピングテーブル６００はメモリ２０２に格納される。あるいは別の実施形態としてＦＭチップ２１０の一部の領域に格納されてもよい。
【００５０】
ＬＢＡ６０２がセクタのＬＢＡを表し、論理ページ＃６０１にはセクタが属する論理ページの論理ページ番号が格納される。物理ページ＃６０５には、セクタが属する論理ページにマッピングされる物理ページの識別番号（物理ページ番号）が格納され、ブロック＃６０４には、この物理ページの属するブロックの識別番号（ブロック番号）が格納される。論理ページに物理ページがマッピングされていない状態の場合、その論理ページの全セクタのブロック＃６０４及び物理ページ＃６０５には無効値（ＮＵＬＬ）が格納される。なお、フラッシュメモリの最小書き込み単位はページである。そのためＤＫＣ１０から論理ページの一部に対する書き込みがあった場合にも、１物理ページが論理ページにマッピングされる。物理ページが論理ページにマッピングされる時、この論理ページの全セクタのブロック＃６０４と物理ページ＃６０５にはそれぞれ、マッピングされた物理ページの属するブロックのブロック番号と、マッピングされた物理ページの物理ページ番号が格納される。
【００５１】
割当状態６０３は、ＬＢＡ６０２で特定されるセクタに対して書き込みがあったことを表す情報が格納される。セクタに対して書き込みがあると、割当状態６０３に“１”が格納される。書き込みが無い場合には“０”が格納される。
【００５２】
論理ページには、ＤＫＣ１０から論理ページへの書き込みがあった時点で初めて物理ページがマッピングされる。物理ページは消去処理を行わない限り再書き込み不可能であるので、ＦＭコントローラ２０１が論理ページに物理ページをマッピングする時、未書き込み状態の物理ページ（未使用物理ページ）をマッピングする。そのためにＦＭコントローラ２０１は、空きページリスト７００（図６）にＦＭＰＫ２００内の全未使用物理ページの情報を格納して管理している。空きページリスト７００のブロック＃７０１、物理ページ＃７０２にはそれぞれ、未使用物理ページの属するブロックのブロック番号、未使用物理ページの物理ページ番号が格納されている。
【００５３】
図７に未初期化ブロックリスト８００の構成を示す。未初期化ブロックリスト８００は、ＦＭＰＫ２００が初期化処理を行う際に用いられる管理情報である。未初期化ブロックリスト８００には、初期化処理時に消去処理の必要なブロックのブロック番号の一覧が格納されている。
【００５４】
続いて、本実施例に係るストレージシステム１で行われる、ＦＭＰＫ２００の初期化処理について説明する。ＤＫＣ１０は複数のＦＭＰＫ２００を用いてＲＡＩＤグループを形成し、形成されたＲＡＩＤグループを用いて１以上のＶＤＥＶを定義する。さらにＤＫＣ１０はＶＤＥＶを用いて、１以上のＬＤＥＶを定義する。
【００５５】
なお、ＲＡＩＤグループを形成するために用いられるＦＭＰＫ２００は、ストレージシステム１にインストール直後の未使用のＦＭＰＫ２００の他、過去に別用途で用いられていたＦＭＰＫ２００であってもよい。そのため、ＲＡＩＤグループを構成する各ＦＭＰＫ２００には、ＲＡＩＤグループ形成直後には任意のデータが格納されている可能性がある。ＦＭＰＫ２００に障害が発生した場合に、ＲＡＩＤ技術によるデータ復旧を可能にするため、ＬＤＥＶ（ＶＤＥＶ）が定義された時点で、ＬＤＥＶ（ＶＤＥＶ）の属するＲＡＩＤグループのデータストライプ及びパリティストライプに適切な情報が格納されている必要がある。つまり各ストライプラインのパリティストライプには、同一ストライプラインの全データストライプから形成される冗長データ（パリティ）が格納された状態にしておく必要がある。
【００５６】
そのため、本実施例に係るストレージシステム１では、ＲＡＩＤグループを構成する各記憶デバイス２００、２００’のデータストライプ及びパリティストライプの全領域（ＤＩＦの格納される部分を除く）を０に設定することで、ＲＡＩＤグループの初期化を行う。またＲＡＩＤグループの初期化の際、各ストライプブロックのＤＩＦに適切な情報を格納する。ＤＫＣ１０は、ＶＤＥＶを構成する各ＦＭＰＫ２００に対して初期化コマンドを送信し、各ＦＭＰＫ２００に初期化を行わせる。ただし、後述するように、実際に記憶領域（ＦＭチップ２１０）に０が格納されるわけではなく、仮想的に記憶領域にａｌｌ  ｚｅｒｏが格納されている状態を各ＦＭＰＫ２００が作り出すに過ぎない。実際にデータ（ａｌｌ  ｚｅｒｏ）が記憶領域に書き込まれないため、初期化処理にかかる時間が実質的に０になる。
【００５７】
続いてＦＭＰＫ２００で実行される各プログラムの処理の流れを説明する。ＦＭＰＫ２００では少なくとも、初期化プログラム、リードプログラム、ライトプログラムが実行される。初期化プログラムはＦＭＰＫ２００の初期化を行うためのプログラムで、ＦＭＰＫ２００の各セクタに、何もデータが格納されていない状態を形成する。ストレージシステム１の管理者（ユーザ）がストレージシステム１に接続された管理端末（非図示）を用いて、ＬＤＥＶまたはＶＤＥＶの初期化の指示をストレージシステム１に発行したことに応じて、ストレージコントローラ１０のプロセッサ１１は、ＬＤＥＶまたはＶＤＥＶの初期化を開始する。プロセッサ１１は、ＬＤＥＶまたはＶＤＥＶを構成する各ＦＭＰＫ２００に対し、初期化コマンドを発行する。ＦＭＰＫ２００のプロセッサ２０３はストレージコントローラ１０から初期化コマンドを受領したことに応じて、初期化プログラムの実行を開始する。
【００５８】
リードプログラムは、ＤＫＣ１０から受領したリードコマンドに係る処理を実行するためのプログラムである。ライトプログラムは、ＤＫＣ１０から受領したライトコマンドに係る処理を実行するためのプログラムである。
【００５９】
まずＦＭＰＫ２００が実施する初期化処理の流れを、図８を用いて説明する。ＦＭＰＫ２００がストレージコントローラ１０から初期化コマンドを受領すると、プロセッサ２０３で初期化プログラムの実行が開始される。初期化プログラムはまず、初期化コマンドと共に送信されてくる構成情報を取得し、メモリ２０２に格納する（Ｓ１１）。構成情報の詳細は後述する。
【００６０】
続いて初期化プログラムは管理情報の初期化を行う（Ｓ１２）。具体的には、論理物理マッピングテーブル６００の全レコードの割当状態６０３が０に、ブロック＃６０４と物理ページ＃６０５がＮＵＬＬに設定される。また空きページリスト７００に格納されている物理ページの情報がすべて消去される。そして未初期化ブロックリスト８００に、ＦＭＰＫ２００内の全ブロックのブロック番号が登録される。
【００６１】
続いて初期化プログラムは未初期化ブロックリスト８００に登録されているブロック番号のブロックの消去を開始する（Ｓ１３）。この時、たとえばブロック番号がＸのブロック（以下ではこれを「ブロック＃Ｘ」と表記する）の消去が完了すると、初期化プログラムは、未初期化ブロックリスト８００からブロック＃Ｘを消去し、空きページリスト７００に、ブロック＃Ｘに属する全物理ページのブロック番号及び物理ページ番号を登録する。
【００６２】
所定数のブロックの消去が完了すると、初期化プログラムはストレージコントローラ１０に対し、初期化が完了した旨のメッセージを通知する（Ｓ１４）。Ｓ１４の前までに消去が行われるブロックは、ＦＭＰＫ２００内のブロックのうち、ごく一部のブロックだけでよい。ストレージコントローラ１０はＦＭＰＫ２００から初期化が完了した旨のメッセージを受領すると、そのＦＭＰＫ２００に対してリードコマンドまたはライトコマンドを発行することができる。管理情報の初期化と、幾つかのブロックの消去が行われた時点で、ＦＭＰＫ２００はストレージコントローラ１０に初期化が完了した旨を通知するため、ＦＭＰＫ２００は極めて短時間に初期化が完了した状態になる。
【００６３】
Ｓ１４の後も、初期化プログラムは未初期化ブロックリスト８００に登録されているブロック番号のブロックの消去を継続する（Ｓ１５）。未初期化ブロックリスト８００に登録されていた全ブロックの消去が完了すると、初期化プログラムの実行が終了する。
【００６４】
なお、Ｓ１３、Ｓ１５のブロックの消去（Ｅｒａｓｅ）処理は必須の処理ではない。初期化プログラムでブロックの消去を行わず、ＦＭＰＫ２００に対してＤＫＣ１０からライトコマンドを受領した時点で、空き物理ページが無かった場合に、ブロックの消去を行ってもよい。ただし、ＦＭＰＫ２００がＳ１３を行わずに、ＤＫＣ１０からのライトコマンドの受け付けを開始すると、ＤＫＣ１０から受領したライトデータを格納する前にブロック消去を実施する必要が生じ、ライト時の性能が悪化する（応答時間が長くなる）。そのため本実施例に係るＦＭＰＫ２００では、あらかじめ所定数のブロックの消去を行っておくことにより、ストレージコントローラ１０からのライトデータを即座に（ブロック消去を実行することなく）物理ページに格納できるようにしている。
【００６５】
続いて、ＦＭＰＫ２００がＤＫＣ１０からライトコマンドを受信した時に実施する、ライト処理の流れを、図９を用いて説明する。ＤＫＣ１０がＦＭＰＫ２００にデータライトを行う際の最小書き込み単位はセクタである。一方ＦＭＰＫ２００がＦＭチップ２１０に書き込みを行う際の最小書き込み単位はページ（物理ページ）で、ページサイズはセクタサイズの整数倍である（ページのサイズはセクタサイズより大きい）。そのため、ＤＫＣ１０からライトコマンドで指定される領域のサイズが１ページ未満等の場合には、ＦＭＰＫ２００はいわゆるリードモディファイライトを実施することで、ＦＭチップ２１０に対してページ単位の書き込みを行う。
【００６６】
ＦＭＰＫ２００がライトコマンドを受領すると、プロセッサ２０３でライトプログラムの実行が開始される。ライトプログラムはＳ１１０において、ライトコマンドに含まれているＬＢＡ、データ長の情報を用いて、データライト先の論理ページの論理ページ＃を算出する。またＳ１１０でライトプログラムは、空きページリスト７００から未使用ページを確保する。なお、空きページリスト７００に物理ページ（未使用ページ）が登録されていない場合、ライトプログラムは未使用ページの確保の前に、未初期化ブロックリスト８００に登録されているブロックの消去を行うことで、未使用ページの作成を行う。作成された未使用ページの情報は、空きページリスト７００に登録される。
【００６７】
Ｓ１１０で、データライト先の論理ページは複数特定されることもある。データライト先の論理ページが複数特定された場合には、ライトプログラムは未使用ページを複数確保する。ただし以下では、Ｓ１１０で論理ページが１ページ特定された場合の例、かつ特定された論理ページ＃がｎ（ｎは０以上の整数値）の場合の例を説明する。
【００６８】
続いてライトプログラムは、メモリ２０２上に、１ページ分のサイズの領域（以下、「バッファ」と呼ぶ）を確保する（Ｓ１２０）。バッファの内容の初期化（たとえば０を書き込む等）は行ってもよいし、行わなくともよい。
【００６９】
Ｓ１３０で、ライトプログラムは、データライト先の論理ページに、すでに物理ページがマッピング済みか否か判定する。これは、論理物理マッピングテーブル６００の論理ページ＃６０１がｎの行の物理ページ＃６０５（及びブロック＃６０４）にＮＵＬＬでない値が格納されているか否かで判定可能である。物理ページ＃６０５（及びブロック＃６０４）がＮＵＬＬの場合、データライト先の論理ページに物理ページがマッピングされていないことを意味する（Ｓ１３０：ＮＯ）。この場合ライトプログラムは、Ｓ１４０、Ｓ１５０をスキップして、Ｓ１６０以降の処理を行う。
【００７０】
一方物理ページ＃６０５（及びブロック＃６０４）がＮＵＬＬでない場合、データライト先の論理ページに物理ページがマッピングされている（Ｓ１３０：ＹＥＳ）。この場合ライトプログラムは、ライトコマンドによって指定されているライト範囲が論理ページ境界に一致しているか判定する（Ｓ１４０）。ライト範囲が論理ページ境界に一致している場合（つまりライト対象領域の先頭ＬＢＡが論理ページ内先頭セクタのＬＢＡに一致し、ライト対象領域の終端ＬＢＡが論理ページ内の終端セクタのＬＢＡと一致している場合）、Ｓ１５０の処理は行われない。一方ライト範囲が論理ページ境界に一致していない場合（Ｓ１４０：ＮＯ）、ライトプログラムは、論理ページにマッピングされている物理ページからデータを読み出して、Ｓ１２０で確保されたバッファに格納する（Ｓ１５０）。
【００７１】
Ｓ１６０ではライトプログラムは、ライトコマンドとともに受領したライトデータを、Ｓ１２０で確保されたバッファに上書きする。上で述べたとおり、ＤＫＣ１０からライトコマンドとともに受領したライトデータには、ＤＫＣ１０によって５１２バイトのデータ毎にＤＩＦが付加されている。続いてライトプログラムはバッファのデータを、Ｓ１１０で確保した物理ページに格納する（Ｓ１７０）。
【００７２】
最後にＳ１８０において、ライトプログラムは、論理物理マッピングテーブル６００の更新を行う。具体的にはライトプログラムは、論理物理マッピングテーブル６００の論理ページ＃６０１がｎの行の物理ページ＃６０５及びブロック＃６０４に、Ｓ１１０で確保した物理ページの物理ページ番号及びブロック番号を格納する。またライトプログラムは、論理物理マッピングテーブル６００のＬＢＡ６０２が、ライトコマンドで指定されたアクセス範囲に含まれる行の、割当状態６０３を“１”に変更する。これらの処理が終了したら、ライトプログラムはライト処理を終了する。
【００７３】
続いて、ＦＭＰＫ２００がＤＫＣ１０からリードコマンドを受信した時に実施する、リード処理の流れを、図１０を用いて説明する。ＤＫＣ１０がＦＭＰＫ２００にデータリードを行う際の最小読み出し単位はセクタである。
【００７４】
ＦＭＰＫ２００がリードコマンドを受領すると、プロセッサ２０３でリードプログラムの実行が開始される。リードプログラムはＳ２１０において、リードコマンドで指定されているアクセス範囲が、過去にライト済みの領域であるか否か確認する。具体的には、論理物理マッピングテーブル６００のレコードのうち、ＬＢＡ６０２がリードコマンドで指定されているアクセス範囲に含まれるレコードの割当状態６０３が“１”であれば、過去にライト済みの領域である。なお、以下では説明が冗長になることを避けるために、リードコマンドで１セクタ分の領域のリードが指定された場合の例を説明する。
【００７５】
リードコマンドで指定されているアクセス範囲に含まれる行の割当状態６０３が“１”の場合（Ｓ２２０：ＹＥＳ）、リードプログラムはリード対象のデータが格納されている物理ページからデータを読み出してメモリ２０２に格納する。ＦＭチップ２１０の最小読出し単位はページ（物理ページ）なので、ここでは１ページ分のデータが読み出される。そしてリードプログラムは、メモリ２０２上に読み出された１ページ分のデータの中から、リードコマンドでリード対象となっているデータを抽出し、ＤＫＣ１０に返送し（Ｓ２３０）、リード処理を終了する。
【００７６】
リードコマンドで指定されているアクセス範囲に含まれる行の割当状態６０３が“０”の場合（Ｓ２２０：ＮＯ）、リードプログラムはフォーマットデータ生成回路２０５を用いて、フォーマットデータをメモリ２０２上に作成する（Ｓ２５０）。フォーマットデータの作成方法については後述する。そして作成されたデータをＤＫＣ１０に返送し、リード処理を終了する。
【００７７】
上ではリードコマンドで指定されているアクセス範囲が１セクタの場合について説明したが、アクセス範囲が複数セクタに跨る場合でも同様の処理が行われる。ただしアクセス範囲が複数セクタに跨る場合、アクセス範囲の領域の中に、過去にライト済みのセクタと、まだ一度もライトが行われていないセクタとが含まれていることがあり得る。その場合リードプログラムは、過去にライト済みのセクタについては、上で述べたＳ２３０の処理を行い、まだ一度もライトが行われていないセクタについては、上で述べたＳ２５０の処理を行えば良い。
【００７８】
最後に、Ｓ２５０で行われるフォーマットデータの作成方法を説明する。本実施例では、図４のデータ５１０に所定のデータパターンが格納されたデータを「フォーマットデータ」と呼ぶ。データパターンの例として、ａｌｌ  ｚｅｒｏ（全ビットが０）がある。以下ではデータ５１０に、ａｌｌ  ｚｅｒｏが格納されたフォーマットデータを作成する場合の例を説明する。
【００７９】
また、フォーマットデータの作成の際、ＬＡ５１３にはデータ５１０の属するＶＤＥＶやＦＭＰＫ  ＬＢＡの情報が格納される。これらの情報は初期化処理の際にＤＫＣ１０から受領する構成情報に含まれており、Ｓ２５０では構成情報を用いてＬＡ５１３が作成される。ＤＫＣ１０から受領する構成情報について、図３を用いて概説する。図３の例では、ＦＭＰＫ＃０（２００−０）〜ＦＭＰＫ＃３（２００−３）で構成されるＲＡＩＤグループに、ＶＤＥＶ＃１００とＶＤＥＶ＃１０１が定義されている。このＲＡＩＤグループに属するＦＭＰＫ２００は、構成情報としてＶＤＥＶ＃（１００と１０１）そして、ＦＭＰＫ２００内の領域のうち、ＶＤＥＶ＃１００に属する領域のアドレス及びサイズ（セクタ数）、ＶＤＥＶ＃１０１に属する領域のアドレス及びサイズ（セクタ数）を受領する。
【００８０】
（１）  データ５１０の格納内容
上でも述べたとおり、ａｌｌ  ｚｅｒｏが格納される。なお、データストライプのデータ５１０とパリティストライプのデータ５１０のいずれにも、ａｌｌ  ｚｅｒｏが格納される。ａｌｌ  ｚｅｒｏのデータストライプを用いてパリティを生成すると、その内容はａｌｌ  ｚｅｒｏになるからである。
【００８１】
（２）  ＣＲＣ５１２の格納内容
データ５１０に、ａｌｌ  ｚｅｒｏが格納される場合、ＣＲＣ５１２の値（つまりデータ５１０から生成されるＣＲＣ）も０になる。そのため、ＣＲＣ５１２にもａｌｌ  ｚｅｒｏが格納される。
【００８２】
（３）  ＬＡ０（５１３−０）の格納内容
Ｓ２５０では、フォーマットデータ生成回路２０５は構成情報とリードコマンドで指定されているＬＢＡの情報を用いて、リードコマンドで指定されているＬＢＡがどのＶＤＥＶに属するか特定する。そして特定されたＶＤＥＶのＶＤＥＶ＃がＬＡ０（５１３−０）に格納される。本実施例では、ＶＤＥＶ＃は１６ビットのサイズの値なので、１バイトの領域であるＬＡ０（５１３−０）に収まるように、ＶＤＥＶ＃を加工してＬＡ０（５１３−０）に格納される。一例としてフォーマットデータ生成回路２０５はＶＤＥＶ＃の上位８ビットと下位８ビットを抽出し、両者の論理和を算出して得られた８ビットの情報をＬＡ０（５１３−０）に格納する。ただしこれ以外の格納形式が採用されてもよい。
【００８３】
（４）  ＬＡ１（５１３−１）の格納内容
ＬＡ１（５１３−１）には、リードコマンドで指定されたＬＢＡ（ＦＭＰＫ  ＬＢＡ）を、リードコマンドで指定されているＬＢＡが属するＶＤＥＶに含まれるＦＭＰＫ２００の領域サイズ（セクタ数）で割った剰余が格納される。たとえばリードコマンドで指定されているＬＢＡがＶＤＥＶ＃１００に属し、ＦＭＰＫ２００の領域のうちＶＤＥＶ＃１００に属する領域のサイズ（セクタ数）がｍであれば、リードコマンドで指定されたＬＢＡをｍで割った剰余が格納される。
【００８４】
（５）  ＡＰＰ５１４の格納内容
Ｓ２５０でフォーマットデータ生成回路２０５は、データ５１０とＣＲＣ５１２とＬＡ５１３の各バイトの排他的論理和を算出し、これをＡＰＰ５１４に格納する。
【００８５】
以上が本実施例に係るストレージシステムで行われる処理の内容である。これまで説明してきたように、本実施例に係るＦＭＰＫ２００では、初期化処理が実行されると、各セクタの割当状態６０３を“０”にすることで、各セクタをデータ未書き込み状態にする。ただし初期化処理が実行される時には、ＦＭチップ２１０へのデータ書き込みは行われない。初期化が行われた直後のＦＭＰＫ２００の各セクタに対してＤＫＣ１０がリード要求を発行した場合、ＦＭＰＫ２００は初期化状態のデータを作成してＤＫＣ１０に返却することにより、見かけ上記憶領域が初期化された状態を作り出している。そのため、本実施例に係るＦＭＰＫ２００は極めて短時間でＦＭＰＫ２００の初期化を実施することができる。
【００８６】
また、高い信頼性を要求されるストレージシステムの場合、記憶デバイスへのデータ格納時に、データに検査用コード（ＤＩＦ）を付加して記憶デバイスに格納する。ＤＩＦには、データアクセス位置の妥当性を検証するための情報（データ格納先アドレス等）が含まれるため、ストレージシステムやボリュームの構成、データの格納位置によってＤＩＦの採り得る値は異なる。本実施例に係るＦＭＰＫ２００ではストレージコントローラ１０から構成情報を取得することで、ＤＩＦに格納するための情報を生成可能に構成されている。そのため、初期化時にストレージコントローラ１０から初期化データを受け取ってＦＭチップ２１０に書き込む必要もない。
【００８７】
以上、本発明の実施例を説明したが、これは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
【符号の説明】
【００８８】
１:  ストレージシステム、２:  ホスト、３:  ＳＡＮ、１０:  ストレージコントローラ、１１:  プロセッサ（ＣＰＵ）、１２:  ホストＩＦ、１３:  デバイスＩＦ、１４:  メモリ、１６:  相互結合スイッチ、２０:  ＲＡＩＤグループ、２００:  ＦＭＰＫ、２００’:  ＨＤＤ、２０１:  ＦＭコントローラ、２０２:  メモリ、２０３:    プロセッサ、２０４:    圧縮伸長回路、２０５:    フォーマットデータ生成回路、２０６:  ＳＡＳ−ＣＴＬ、２０７:    ＦＭ―ＩＦ、２０８:  内部接続スイッチ、２１０:  ＦＭチップ
【図１】
0006453457.tif 000002
【図２】
0006453457.tif 000003
【図３】
0006453457.tif 000004
【図４】
0006453457.tif 000005
【図５】
0006453457.tif 000006
【図６】
0006453457.tif 000007
【図７】
0006453457.tif 000008
【図８】
0006453457.tif 000009
【図９】
0006453457.tif 000010
【図１０】
0006453457.tif 000011