(57)【要約】  本発明の一観点に係るストレージ装置は、ストレージコントローラと複数の記憶デバイスを有する。記憶デバイスは、記憶媒体として不揮発性半導体メモリを有する。各記憶デバイスのコントローラは、不揮発性半導体メモリの劣化状態を診断し、寿命の到達が近いと予想した場合に、当該不揮発性半導体メモリに格納されていたデータを、別の不揮発性半導体メモリにコピーしたのち、当該の不揮発性半導体メモリの閉塞処理と、記憶容量の縮退処理を実施する。
2016174729.tif 000002
【特許請求の範囲】
【請求項１】
ストレージコントローラと、
不揮発性記憶媒体とデバイスコントローラを有し、前記ストレージコントローラに所定サイズの記憶空間を提供する複数の記憶デバイスと、
を有し、
前記デバイスコントローラは、前記不揮発性記憶媒体の各記憶領域の診断を行い、
前記診断の結果、データの読み出しは可能だが、寿命間近の状態にある記憶領域が存在した場合、前記デバイスコントローラは、
前記寿命間近の状態にある記憶領域のデータを、前記記憶デバイス内の別の記憶領域に移動し、
前記寿命間近の状態にある記憶領域を閉塞し、
前記記憶空間のサイズを、前記閉塞された記憶領域の大きさだけ縮小する、
ことを特徴とする、ストレージ装置。
【請求項２】
前記デバイスコントローラは、前記記憶空間のサイズの縮小要求を前記ストレージコントローラに発行し、
前記デバイスコントローラは、前記ストレージコントローラから前記記憶空間のサイズの縮小を許可する旨のメッセージを受領した場合、前記記憶空間のサイズを縮小する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記各記憶領域の合計サイズは、前記記憶空間のサイズである論理容量と、予備容量の和に等しく、
前記記憶デバイスが、最小予備容量以上の前記予備容量を有している場合、前記記憶空間のサイズに代えて、前記予備容量を縮小する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、複数の記憶デバイスの記憶空間を用いて構成されるＲＡＩＤグループを複数管理しており、
前記ストレージコントローラは、前記記憶デバイスから前記記憶空間のサイズの縮小要求を受領すると、
前記記憶デバイスの属するＲＡＩＤグループに含まれる複数の記憶デバイスの記憶空間のサイズの最小値に基づいて、前記ＲＡＩＤグループの容量を変更する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、前記ＲＡＩＤグループの容量を変更すると、
前記縮小要求を通知してきた記憶デバイスに、前記記憶空間のサイズの縮小を許可する旨のメッセージを送信する、
ことを特徴とする、請求項４に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、前記ＲＡＩＤグループの記憶領域をチャンクごとに管理しており、
前記ストレージコントローラはまた、複数の仮想チャンクから構成される仮想ボリュームをホスト計算機に提供し、前記仮想チャンクに対するライト要求を前記ホスト計算機から受領した時点で、前記チャンクを前記仮想チャンクにマップし、前記マップされたチャンクにライトデータを格納するよう構成されており、
前記ＲＡＩＤグループの容量の変更により、削減されるチャンクが発生する場合、前記ストレージコントローラは、前記削減されるチャンクのうち、前記仮想チャンクにマップされている前記チャンクのデータを、別のＲＡＩＤグループに移動した後に、前記ＲＡＩＤグループの容量を変更する、
ことを特徴とする、請求項４に記載のストレージ装置。
【請求項７】
前記記憶デバイスは、複数のサンプル記憶媒体のエラー特性情報と寿命特性情報を有し、
前記デバイスコントローラは前記診断において、前記各記憶領域のエラー特性を前記複数のエラー特性情報と比較することで、前記各記憶領域のエラー特性と最も近いエラー特性を有する前記サンプル記憶媒体を特定し、
前記特定されたサンプル記憶媒体の寿命特性情報を用いて、前記各記憶領域の劣化状態を判定する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項８】
前記エラー特性情報は、前記記憶領域のリード時に発生したエラービット数に関する情報を含み、
前記寿命特性情報は、前記記憶領域を閉塞すべき消去回数の情報を含んでおり、
前記デバイスコントローラは、前記記憶領域の消去回数が、前記寿命特性情報に含まれる消去回数を超過している場合、前記記憶領域が寿命間近の状態にあると判定する、
ことを特徴とする、請求項７に記載のストレージ装置。
【請求項９】
前記記憶デバイスは、前記不揮発性記憶媒体を複数有し、
前記デバイスコントローラは、複数の前記不揮発性記憶媒体を用いてＲＡＩＤグループを構成し、
前記記憶領域のリード時にアンコレクタブルエラーが発生した場合、前記ＲＡＩＤグループ内に格納されているパリティを用いてデータを復旧する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項１０】
複数の記憶領域を有する不揮発性記憶媒体と、デバイスコントローラを有する記憶デバイスであって、
前記デバイスコントローラは、前記不揮発性記憶媒体の各記憶領域の診断を行い、
前記診断の結果、データの読み出しは可能だが、寿命間近の状態にある記憶領域が存在した場合、
前記寿命間近の状態にある記憶領域のデータを別の記憶領域に移動し、
前記寿命間近の状態にある記憶領域を閉塞し、
前記デバイスコントローラが外部に提供している記憶空間のサイズを、前記閉塞された記憶領域の大きさだけ縮小する、
ことを特徴とする、記憶デバイス。
【請求項１１】
前記デバイスコントローラは、前記記憶デバイスの接続される外部装置に前記記憶空間のサイズの縮小要求を発行し、
前記外部装置から、前記記憶空間のサイズの縮小を許可する旨のメッセージを受領した場合、前記記憶空間のサイズを縮小する、
ことを特徴とする、請求項１０に記載の記憶デバイス。
【請求項１２】
前記各記憶領域の合計サイズは、前記記憶空間のサイズである論理容量と、予備容量の和に等しく、
前記記憶デバイスが、最小予備容量以上の前記予備容量を有している場合、前記記憶空間のサイズに代えて、前記予備容量を縮小する、
ことを特徴とする、請求項１０に記載の記憶デバイス。
【請求項１３】
前記記憶デバイスは、複数のサンプル記憶媒体のエラー特性情報と寿命特性情報を有し、
前記デバイスコントローラは前記診断において、前記各記憶領域のエラー特性を前記複数のエラー特性情報と比較することで、前記各記憶領域のエラー特性と最も近いエラー特性を有する前記サンプル記憶媒体を特定し、
前記特定されたサンプル記憶媒体の寿命特性情報を用いて、前記各記憶領域の劣化状態を判定する、
ことを特徴とする、請求項１０に記載の記憶デバイス。
【請求項１４】
前記エラー特性情報は、前記記憶領域のリード時に発生したエラービット数に関する情報を含み、
前記寿命特性情報は、前記記憶領域を閉塞すべき消去回数の情報を含んでおり、
前記デバイスコントローラは、前記記憶領域の消去回数が、前記寿命特性情報に含まれる消去回数を超過している場合、前記記憶領域が寿命間近の状態にあると判定する、
ことを特徴とする、請求項１３に記載の記憶デバイス。
【請求項１５】
前記記憶デバイスは、前記不揮発性記憶媒体を複数有し、
前記デバイスコントローラは、複数の前記不揮発性記憶媒体を用いてＲＡＩＤグループを構成し、
前記記憶領域のリード時にアンコレクタブルエラーが発生した場合、前記ＲＡＩＤグループ内に格納されているパリティを用いてデータを復旧する、
ことを特徴とする、請求項１０に記載の記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置の制御に関する。
【背景技術】
【０００２】
ストレージ装置は、データを格納する多数の記憶デバイスと、記憶デバイスを制御するストレージコントローラとを有しており、計算機に大容量のデータ格納空間を提供することを目的としている。【０００３】
記憶デバイスとして、一般にＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）が搭載されているが、近年、ＨＤＤに代わる新しい記憶媒体として、不揮発性半導体メモリ（例えば、ＦＭ：フラッシュメモリ）を有する記憶デバイス（例えばＳＳＤ：Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が注目されている。【０００４】
一般的に、多くのＳＳＤはＮＡＮＤ型のＦＭチップを複数枚搭載しており、ＦＭチップは、ページ（Ｐａｇｅ）と呼ばれる単位でデータのリードやライトを行う。ＦＭはページに格納したデータを直接上書きすることが出来ないので、新たなデータを格納するには、データを一度消去する必要がある。データの消去は、ブロック（Ｂｌｏｃｋ）と呼ばれるページの集合体に対して実施される。さらに、ＦＭ内にはダイ（Ｄｉｅ）と呼ばれるブロックの集合体が構築されている。ここで、ブロックの消去回数には上限がある。つまり、ＦＭには寿命があり、多数のＦＭを搭載するＳＳＤにも寿命がある。例えば、ＦＭは寿命に到達すると、データの書き込みや、データの読み出しが正しく出来なくなる場合がある。データの読み出しが正しく出来ない場合、ＳＳＤは格納されたデータを失った（データをロストした）状態となる。【０００５】
さらにＦＭは、ダイやチップなどの単位で品質にばらつきが生じ得る。品質が悪いダイは、所定の目標消去回数に満たない場合でも、寿命到達による障害が発生し、使用できなくなる。例えば、ＳＳＤはユーザに記憶容量を提供している（以下、論理容量と呼ぶ）。しかし、一部のＦＭチップに障害が発生し、その容量を維持出来なくなると、他に品質が良く使用可能なＦＭチップが存在していたとしても、ＳＳＤは閉塞される。【０００６】
このように、所定の期間よりも早期にＳＳＤが使用不能になると、交換の頻度が増加し、ＳＳＤの追加購入や保守のためのコストが発生し、ＴＣＯの増大等を招く恐れがある。また、一部のＦＭチップが障害を起こしただけで、ＳＳＤ全体を閉塞させると、残り多数の使用可能なＦＭチップを無駄にするため、勿体ない。【０００７】
特許文献１には、ストレージコントローラが容量仮想化機能を用いることで、ＦＭチップ障害が発生したＳＳＤを閉塞させずに、そのまま、継続使用する技術が開示されている。【０００８】
容量仮想化機能とは、ストレージ装置の物理容量よりも大きな仮想容量を仮想ボリュームとして、ホスト計算機に提供する技術である。容量仮想化では、まずストレージ装置内の複数の記憶デバイスをまとめてプールが作成され、プール内の記憶領域は所定サイズのチャンクという単位で管理される。そして、ストレージ装置は、ホスト計算機から仮想ボリュームへのライト要求に応じて、ライト要求で指定された仮想ボリューム内の領域にチャンクを割り当てる。容量仮想化機能では、ストレージコントローラはホストに仮想的な容量を提示することが出来るため、容量縮退処理によりＳＳＤの論理容量が変動したとしても、ストレージコントローラは、ホストに提示する仮想容量のサイズを一定に保ち続けることが出来るため、その影響を隠蔽することが出来る。【０００９】
これにより、ストレージコントローラは、ＦＭに障害が発生したＳＳＤの論理容量を、縮小させながら運用を継続できるため、そのＳＳＤに搭載されたＦＭチップを全て使い切ることが出来る。なお本明細書では、ＳＳＤの論理容量を縮小させる処理を「容量縮退処理」と呼ぶ。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】国際公開第２０１４／１９６０００号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
従来手法では、ＳＳＤがＦＭチップの障害発生を検出（すなわち、ＦＭに格納されていたデータのロスト）した後に、容量縮退処理を実行するため、はじめにロストしたデータを復旧する必要があった。その手段として、特許文献１では、ストレージコントローラが、複数のＳＳＤをＲＡＩＤ(Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  Ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  （ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓ）構成で使用し、あるＳＳＤがロストしたデータを、ストレージコントローラが、ＲＡＩＤ構成を組む別のＳＳＤから取得したデータとパリティを用いて、失ったデータを復旧（リビルド）する技術が開示されている。ただし、リビルド処理はストレージコントローラの負荷増大を招くため、ストレージ装置全体のＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）性能の低下を招く恐れがある。
【課題を解決するための手段】
【００１２】
本発明の一観点に係るストレージ装置では、ストレージコントローラと複数の記憶デバイスを有する。記憶デバイスは、不揮発性記憶媒体とデバイスコントローラを有し、ストレージコントローラに所定サイズの記憶空間を提供する。デバイスコントローラは、不揮発性記憶媒体の各記憶領域の診断を行った結果、寿命到達間近の記憶領域が存在した場合、その記憶領域を閉塞し、記憶空間のサイズを、閉塞された記憶領域の分だけ縮小する。
【発明の効果】
【００１３】
容量縮退処理の前に行われていたデータリビルド処理が不要になるため、ストレージ装置の性能低下を抑止することが出来る。
【図面の簡単な説明】
【００１４】
【図１】本発明の概要を示す図である。
【図２】第１の実施例に係るストレージ装置１を含むストレージシステム１００００の構成例を示す図である。
【図３】ＳＳＤ２１の構成例を示す図である。
【図４】ＳＳＤの論理容量と、物理容量との関係を示す概念図である。
【図５】ＲＡＩＤグループの説明図である。
【図６】仮想ボリュームとＲＡＩＤグループ、プールの関係を表す図である。
【図７】ストレージコントローラのメモリに格納される管理情報の内容を表す図である。
【図８】仮想ボリューム管理テーブルの構成を説明する図である。
【図９】プール管理テーブルの構成を説明する図である。
【図１０】ＲＡＩＤグループ管理テーブルの構成を説明する図である。
【図１１】ＳＳＤコントローラのメモリに格納される管理情報の内容を表す図である。
【図１２】構成情報管理テーブルの構成を説明する図である。
【図１３】論理物理変換テーブルの構成を説明する図である。
【図１４】ブロック管理テーブルの構成を説明する図である。
【図１５】ＷＲ後経過時間とエラービット数との関係を説明する図である。
【図１６】ブロック消去回数とエラービット数との関係を説明する図である。
【図１７】ＦＭエラービット特性テーブルの構成を説明する図である。
【図１８】ＦＭ寿命特性テーブルの構成を説明する図である。
【図１９】ストレージコントローラタスクのフローチャートである。
【図２０】ストレージコントローラのデータライト処理のフローチャートである。
【図２１】ストレージコントローラのデータリード処理のフローチャートである。
【図２２】ＳＳＤコントローラタスクのフローチャートである。
【図２３】ＦＭ診断処理のフローチャートである。
【図２４】ＳＳＤコントローラの容量縮退処理のフローチャートである。
【図２５】ストレージコントローラの容量縮退処理のフローチャートである。
【図２６】第２の実施例に係る、ＳＳＤ内のデータ配置の説明図である。
【図２７】第２の実施例に係る、ＳＳＤコントローラタスクのフローチャートである。
【図２８】第２の実施例に係る、ＦＭ診断処理のフローチャートである。
【発明を実施するための形態】
【００１５】
以下、幾つかの実施例を説明する。
【００１６】
以下の説明では、記憶デバイスがＳＳＤであるとの前提に基づいた説明を行う。ＳＳＤに含まれる不揮発半導体記憶媒体は、フラッシュメモリ（ＦＭ）であるとする。そのフラッシュメモリは、ページ単位でリード／ライトが行われる種類のフラッシュメモリ、典型的にはＮＡＮＤ型のフラッシュメモリであるとする。しかし、フラッシュメモリは、ＮＡＮＤ型に代えて他種のフラッシュメモリでも良い。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリなどが採用されても良い。
【００１７】
実施例の説明に入る前に、以下で説明する実施例で用いられる各種用語について説明する。
【００１８】
「ページ」とは、フラッシュメモリにおけるリード／ライトの最小単位であり、ページのサイズは一例として８ＫＢである。本明細書では、「物理ページ」と「論理ページ」という２つの概念が用いられる。物理ページはフラッシュメモリチップ上の物理記憶領域を意味する語として用いられる。また論理ページは、フラッシュメモリを用いた記憶デバイス（ＳＳＤ等）がストレージコントローラなどに提供する記憶空間を、所定のサイズで分割することで形成される論理的記憶領域を意味する。また単に「ページ」と記載されている語は、「物理ページ」のことを意味する。
【００１９】
「リクラメーション」とは、フラッシュメモリの一度使用したブロックを再度利用可能にするための処理である。リクラメーション処理では、１以上のブロックの消去を行うことで、再度利用可能なブロックを生成する。またブロックの消去の際、使用中のページのデータは、別のブロックに移動される。
【００２０】
「リフレッシュ」とは、本明細書においては、物理ページ（またはブロック）に格納されているデータを読み出して、別の物理ページ（ブロック）に移動する処理のことを意味する。
【実施例１】
【００２１】
まず、図１を用いて実施例１の概要を説明する。【００２２】
ストレージ装置１は、記憶デバイス（典型的には不揮発記憶デバイス）の一例であるＳＳＤ２１−１〜２１−３と、それらの記憶デバイスを制御するストレージコントローラ１０とを備える。【００２３】
ＳＳＤ２１−１は、ストレージコントローラ１０に提示する、論理アドレス空間（ＬＢＡ空間）と、実際のデータを格納する物理アドレス空間（ＰＢＡ空間）をそれぞれ有している。なお、本明細書では、論理アドレス空間のサイズを論理容量、物理アドレス空間のサイズを物理容量とそれぞれ定義する。ＳＳＤ２１−１の物理アドレス空間は、ＦＭチップにより構成されている。図には、複数のブロック２１１が描かれている。なお、ＳＳＤはブロック（正しくはページ）に格納されたデータを上書くことは出来ず、データは消去済みの別のブロックに書き込む必要があるため、ＬＢＡ空間よりも大きなＰＢＡ空間を有している。ＬＢＡ空間とＰＢＡ空間の対応付けは動的に変更が可能で、後述する論理物理変換テーブル１１００にて管理されている。【００２４】
次にストレージコントローラ１０は、ＳＳＤ２１−１〜２１−３（厳密には、ＳＳＤ２１−１〜２１−３より提供された論理容量２０−１〜２０−３）をまとめて、ＲＡＩＤグループ（ＲＧ）３０−１を構成している。図示はしていないが、別のＳＳＤをまとめて、ＲＡＩＤグループ３０−２を構成している。さらに、ストレージコントローラ１０は、２つのＲＡＩＤグループ３０−１と３０−２をまとめて、プール３５を構成している。なお、ストレージコントローラ１０は、ＲＡＩＤグループの記憶領域を、所定サイズの区画に分割して管理する。この区画を「チャンク」と呼ぶ。なお、図１に記載の例では、ＲＡＩＤグループ３０−１にはチャンク３１が、ＲＡＩＤグループ３０−２にはチャンク３２がそれぞれ作成されている。【００２５】
ストレージ装置１は、ホスト計算機（ホスト）２に接続されており、ホスト計算機２に対して仮想ボリューム４０を提供する。仮想ボリューム４０は、例えば、シンプロビジョニング技術（容量仮想化機能）を用いて構成される仮想的なボリュームである。ストレージコントローラ１０は、ホスト計算機２から仮想ボリューム４０に対するライト要求を受信すると、ＲＡＩＤグループ内の任意のチャンクを、仮想ボリューム４０の仮想チャンク４１に割り当て、ライト要求に伴うデータをチャンクに書き込む。【００２６】
ストレージコントローラ１０は、必要に応じて、例えば、ＲＡＩＤグループ３０−１内のチャンク３１のデータを、ＲＡＩＤグループ３０−２内のチャンク３２に移動させるチャンク移動処理を実行する。このとき、ストレージコントローラ１０は、仮想チャンク４１に割り当てられるチャンクを、チャンク３１からチャンク３２へと変更する。【００２７】
ＳＳＤ２１−１は、ＦＭチップのページからデータをリードした際に、エラービット数や消去回数を検出し、その結果に基づいて、ＦＭチップの劣化状態を把握する機能を有している。なおブロックは、劣化の具合に応じて、以下３種の状態で管理されている。（１）劣化が少なく、寿命到達まで余裕があると予想されるブロック（図１では、Ｎと表記されているブロック）、（２）劣化が進んでおり、寿命到達が間近であると予想されるブロック（図１では、Ｗと表記されているブロック）、（３）寿命に到達した、もしくは、寿命到達の危険性が高いため、ＳＳＤ２１−１が使用を停止した（すなわち、閉塞させた）ブロック（図１では、Ｘと表記されているブロック）である。【００２８】
ＳＳＤ２１−１は、ブロックを閉塞させた際に論理容量２０−１を縮小させる。そのため、ＳＳＤ２１−１は、ストレージコントローラ１０に対して、論理容量２０−１の変更要求を通知する。ＳＳＤ２１−１からの通知を受け取ったストレージコントローラ１０は、ＳＳＤ２１−１が所属するＲＡＩＤグループ３０−１とプール３５の容量を縮小させる。なお、ＲＡＩＤグループ３０−１は、チャンク単位でデータを格納するため、ＲＡＩＤグループ３０−１の容量は、論理容量が最小のＳＳＤの容量のＮ倍（Ｎは、ＲＡＩＤグループを構築するＳＳＤの台数）となる。また、ＲＡＩＤグループ３０−１の容量が小さくなると、これまでＲＡＩＤグループ３０−１に格納されていたデータの一部が溢れる場合がある。そのため、ストレージコントローラ１０は、チャンク内のデータを別のＲＡＩＤグループ３０−２に移動させることで、ＲＡＩＤグループ３０−１のデータ溢れを防止する。なおチャンク内のデータを移動させる際に、ストレージコントローラ１０は、移動対象として、任意のチャンクを選択できる。【００２９】
次に、実施例１に係るストレージ装置１で行われる処理の流れを説明する。（なお、説明の都合上、図２以降で述べる詳細説明と、処理の実行タイミングが異なる部分がある）。【００３０】
ＳＳＤ２１−１は、定期的にブロックの劣化状態を監視し、寿命到達が間近であると予想されるブロック（ブロックの状態が△）を検出すると（Ｓ１）、そのブロックのデータを、寿命に余裕がある別のブロック（ブロックの状態が○）に移動させ、そのブロックを閉塞させる（Ｓ２）。次にＳＳＤ２１−１は、ストレージコントローラ１０に対して、論理容量２０−１の削減を通知する（Ｓ３）。ＳＳＤ２１−１からの通知を受け取ったストレージコントローラ１０は、論理容量２０−１の削減量をもとに、ＲＡＩＤグループ３０−１とプール３５の容量の変更処理を行う（Ｓ４）。このとき、ＲＡＩＤグループ３０−１からデータが溢れると予想される場合は、容量に余裕のある別のＲＡＩＤグループ３０−２に、チャンクのデータを移動し（Ｓ５）、ＲＡＩＤグループ３０−１のデータ溢れを防止する。このとき、ストレージコントローラ１０は、ホスト計算機２に提供する仮想ボリューム４０の容量を維持し続けるため、ホスト計算機２が一連の処理を検知することはない。【００３１】
このように、本発明の一実施形態に係るストレージ装置では、従来の容量縮退処理で必要としていた、リビルド処理の発生を抑止できるため、リビルド処理によるストレージ装置の性能劣化を抑えることが出来る。【００３２】
図２は、第１の実施例に係るストレージ装置１を含むストレージシステム１００００の構成例を示す図である。【００３３】
ストレージ装置１は、ストレージコントローラ１０と、ストレージコントローラ１０に接続された複数のＳＳＤ２１を有する。【００３４】
ＳＳＤ２１は、ホスト２などの上位装置からのライトデータを格納するための記憶デバイスで、フラッシュメモリ等の不揮発性半導体メモリを記憶媒体として採用した記憶デバイスである。ＳＳＤ２１の内部構成は後述する。ＳＳＤ２１は一例として、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格に従う伝送線（ＳＡＳリンク）や、ＰＣＩ  （Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）規格に従う伝送線（ＰＣＩリンク）などによって、ストレージコントローラ１０と接続される。【００３５】
また、図２に示されているように、本実施例のストレージ装置１にはＳＳＤ２１の他、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２５も搭載可能である。ＨＤＤ２５は、磁気ディスクを記録媒体とする記憶デバイスである。ＨＤＤ２５もＳＳＤ２１と同様、ストレージコントローラ１０に接続される。またＳＳＤ２１と同様、ＨＤＤ２５もＳＡＳリンクなどによってストレージコントローラ１０に接続される。ただし以下では、本実施例のストレージ装置１には、記憶デバイスとしてＳＳＤ２１のみが接続されている構成について中心に説明する。【００３６】
ストレージコントローラ１０には、１以上のホスト２が接続される。またストレージコントローラ１０には、管理ホスト５が接続される。ストレージコントローラ１０とホスト２とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）３を介して接続される。ストレージコントローラ１０と管理ホスト５とは、一例としてイーサネットを用いて形成されるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）６を介して接続される【００３７】
ストレージコントローラ１０は少なくとも、プロセッサ（ＣＰＵ）１１、ホストインタフェース（図中では「ホストＩ／Ｆ」と表記）１２、デバイスインタフェース（図中では「デバイスＩ／Ｆ」と表記）１３、メモリ１４、管理用Ｉ／Ｆ１５を有する。そしてプロセッサ１１、ホストＩ／Ｆ１２、デバイスＩ／Ｆ１３、メモリ１４、管理用Ｉ／Ｆ１５は、内部スイッチ（内部ＳＷ）１６を介して相互接続されている。図２ではこれらの構成要素がそれぞれ１つだけ示されているが、高性能化及び高可用性の確保のため、これらの構成要素のそれぞれがストレージコントローラ１０内に複数搭載されていてもよい。また内部ＳＷ１６ではなく、共通バスを介して各構成要素が相互接続された構成にしてもよい。【００３８】
デバイスＩ／Ｆ１３は少なくとも、インタフェースコントローラと転送回路を有する。インタフェースコントローラは、ＳＳＤ２１の用いているプロトコル（一例ではＳＡＳ）をストレージコントローラ１０内部で用いられている通信プロトコル（一例としてＰＣＩ−Ｅｘｐｒｅｓｓ）に変換するためのコンポーネントである。転送回路は、ストレージコントローラ１０が、ＳＳＤ２１に対してデータの転送（リード、ライト）を行う際に用いられる。【００３９】
ホストＩ／Ｆ１２は、デバイスＩ／Ｆ１３と同様に、少なくともインタフェースコントローラと転送回路を有する。ホストＩ／Ｆ１２が有するインタフェースコントローラは、ホスト２とストレージコントローラ１０間のデータ転送経路で用いられている通信プロトコル（たとえばファイバチャネル）と、ストレージコントローラ１０内部で用いられている通信プロトコルを変換するためのものである。【００４０】
プロセッサ１１は、ストレージ装置１の各種制御を行う。メモリ１４は、プロセッサ１１が実行するプログラムや、プロセッサ１１が使用するストレージ装置１の各種管理情報を記憶するために用いられる。またメモリ１４は、ＳＳＤ２１に対するＩ／Ｏ対象データを一時的に記憶するためにも用いられる。以下、ＳＳＤ２１に対するＩ／Ｏ対象データを一時的に記憶するために用いられる、メモリ１４中の記憶領域を、「キャッシュ」と呼ぶ。メモリ１４はＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体で構成されるが、別の実施形態として、不揮発性メモリを用いてメモリ１４を構成してもよい。【００４１】
管理ホスト５は、ストレージ装置１の管理操作を行うための計算機である。管理ホスト５は、キーボードやディスプレイ等の入出力デバイス（非図示）を備え、ユーザ（管理者）は入出力デバイスを用いてストレージ装置１に対する設定指示を行うことができる。また管理ホスト５は、ストレージ装置１の状態等の情報をディスプレイ等の出力デバイスに表示することもできる。【００４２】
図３は、ＳＳＤ２１の構成例を示す図である。【００４３】
ＳＳＤ２１は、ＳＳＤコントローラ２００と複数のＦＭチップ２１０から構成される。ＳＳＤコントローラ２００は、プロセッサ（ＣＰＵ）２０１、上流Ｉ／Ｆ（ｕｐｓｔｒｅａｍ  Ｉ／Ｆ）２０２、下流Ｉ／Ｆ（ｄｏｗｎｓｔｒｅａｍ  Ｉ／Ｆ）２０３、メモリ２０４、パリティ演算回路２０６を有し、これらは内部接続スイッチ（内部接続ＳＷ）２０５を介して相互接続されている。【００４４】
上流Ｉ／Ｆ２０２は、ＳＳＤ２１とストレージコントローラ１０間の通信を行うためのインタフェースコントローラである。上流Ｉ／Ｆは、伝送線（ＳＡＳリンクや、ＰＣＩリンク）を介してストレージコントローラ１０のデバイスＩＦ１３に接続される。一方下流Ｉ／Ｆ２０３は、ＳＳＤコントローラ２００とＦＭチップ２１０間の通信を行うためのインタフェースコントローラである。【００４５】
また下流Ｉ／Ｆ２０３は、ＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）の生成、ＥＣＣを用いたエラー検出及びエラー訂正を行う機能を有している。なおＥＣＣの一例として、ＢＣＨ符号やＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号などが用いられても良い。ＳＳＤコントローラ２００からＦＭチップ２１０にデータが送信（書き込み）される際、下流Ｉ／Ｆ２０３はＥＣＣを生成する。そして下流Ｉ／Ｆ２０３はデータに対し、生成されたＥＣＣを付加し、ＦＭチップ２１０にはＥＣＣの付加されたデータを書き込む。ＳＳＤコントローラ２００がＦＭチップ２１０からデータを読み出す際、ＦＭチップ２１０からはＥＣＣの付加されたデータが読み出され、下流Ｉ／Ｆ２０３にはこのＥＣＣの付加されたデータが到来する。下流Ｉ／Ｆ２０３はＥＣＣを用いてデータエラーチェック（データからＥＣＣを生成し、この生成されたＥＣＣと、データに付加されているＥＣＣが一致するかチェック）を行い、データエラーが検出された場合、ＥＣＣを用いてデータ訂正を行う。またデータエラーが発生した場合、データエラーの発生数をＣＰＵ２０１に通知する機能も備えている。【００４６】
ＣＰＵ２０１は、ストレージコントローラ１０から到来する各種コマンドに係る処理等を行う。メモリ２０４は、プロセッサ２０１が実行するプログラムや、各種管理情報が記憶される。またメモリ２０４の一部の領域は、ストレージコントローラ１０からライトコマンドと共に送信されてくるライトデータや、ＦＭチップ２１０から読み出されたデータを一次的に格納するためのバッファとしても用いられる。メモリ２０４には、ＤＲＡＭ等の揮発性メモリが用いられる。ただしメモリ２０４に不揮発性メモリが使用されても良い。【００４７】
パリティ演算回路２０６は、ＳＳＤ２１内でパリティデータを作成するための回路である。ただし実施例１に係るＳＳＤ２１では、パリティ演算回路２０６は必須ではない。なお、パリティ演算回路２０６の使用例については、実施例２で述べる。【００４８】
ＦＭチップ２１０は、たとえばＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリチップである。フラッシュメモリは周知のとおり、ページ２１２の単位でデータの読み出し・書き込みが行われ、またデータ消去は、複数ページ２１２の集合であるブロック２１１の単位で行われる。そして一度書き込みが行われたページは上書きが出来ず、一度書き込みが行われたページに対して再度書き込みを行うためには、当該ページを含むブロック全体を消去する必要がある。ＦＭチップ２１０内には、ブロック２１１の集合体であるダイ２１３が複数個存在しており、さらにブロック２１１には複数のページ２１２が存在している。【００４９】
本実施例におけるＳＳＤ２１は、複数の不揮発性記憶媒体（フラッシュメモリ等）と、それらを制御するデバイスコントローラとを備える記憶デバイスであればよく、フォームファクタが公知のＨＤＤやＳＳＤ等のものに限定されるものではない。また、不揮発性記憶媒体には、ＮＯＲ型またはＮＡＮＤ型フラッシュメモリの他、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）や、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等の各種半導体メモリが使用されても良い。【００５０】
続いて、本明細書における、ＳＳＤ２１の論理容量と物理容量、およびブロック閉塞に伴う各容量の変化について説明する。【００５１】
図４は、ＳＳＤの論理容量と、物理容量との関係を示す概念図である。図４の上段に記載されている円柱は、ＳＳＤ２１がストレージコントローラ１０に提供する論理アドレス空間を表している。そしてこの円柱の高さが、論理アドレス空間の論理容量（図１の論理容量２０−１〜２０−３に相当）を表している。例えばＳＳＤ２１の論理容量が１．０ＴＢの時、ストレージコントローラ１０は、そのＳＳＤ２１に合計１．０ＴＢ分のデータを格納できると認識する。【００５２】
次に、図４の下段に記載されている長方形は、ＳＳＤ２１が有する物理アドレス空間を表し、長方形の高さがその物理容量を示している。ＳＳＤ２１の物理容量は、ユーザデータ容量５１と予備容量５２に大別され、その合計値は、ＳＳＤ２１に搭載されたＦＭチップ２１０の合計容量に等しい。【００５３】
ユーザデータ容量５１は、論理容量５０に対応しており、ユーザやストレージコントローラ１０から書き込まれたデータを格納するために確保される記憶領域の量である。そのため、ユーザデータ容量５１と、論理容量５０のサイズは等しい。【００５４】
一方、予備容量は、ＳＳＤ２１が消去済みのブロックを生成する、リクラメーション処理を実行するために必要な容量である。一般に、ＳＳＤは予備容量５２が枯渇すると、消去ブロックを生成することが出来なくなるため、予備容量５２はＳＳＤにとって必須の容量である。本実施例では、ＳＳＤ２１がリクラメーション処理実行に要する、予備容量の最小値を「最小予備容量」と呼ぶ。ただし予備容量５２を大きくとることで、リクラメーション処理を効率的に行えるため、一般的なＳＳＤは予備容量５２に余裕を設けている。また本実施例に係るＳＳＤ２１でも、予備容量５２の初期値は最小予備容量よりも大きい。【００５５】
またＳＳＤ２１の内部では、ブロック２１１やページ２１２を、ユーザデータの格納用や予備用に、役割を分担して使用する。ただし、各ブロック２１１やページ２１２の役割は固定的ではなく、動的に変更できる。【００５６】
次に、ブロックを閉塞させた際の、論理容量と物理容量の管理方法について説明する。図４の横軸は時間の経過を示している。(a)はＳＳＤ２１の初期状態を示しており、いずれのＦＭチップ２１０にも故障は発生していない。(b)は、いくつかのブロックが閉塞した状態を示している。ＳＳＤ２１はブロック閉塞時に、まず予備容量５２を縮小させていく。ただし、(b)の状態ではそのサイズは最小予備容量に到達している。(b)の状態まで、ユーザデータ容量５１は維持されるため、論理容量５０の変動は生じない。次に(c)は、（b）の状態から、さらなるブロックの閉塞が発生した際の状態を示している。このときＳＳＤ２１は、予備容量５２を縮小することは出来ないので、ユーザデータ容量５１を縮小する。そのため、論理容量５０の縮小が発生する。これ以降、ＳＳＤ２１内でブロックの閉塞が発生するたびに、ＳＳＤ２１は論理容量５０を縮小させ続けていく。【００５７】
次に、ＲＡＩＤグループ内の記憶領域について、図５を用いて説明する。ストレージ装置１は、複数のＳＳＤ２１を１つのＲＡＩＤグループとして管理する。そしてＲＡＩＤグループ内で１つ（あるいは２つ）のＳＳＤ２１に障害が発生してデータアクセスできなくなった場合に、残りのＳＳＤ２１内のデータを用いて、障害が発生したＳＳＤ２１に格納されていたデータを復旧できるようにしている。【００５８】
図５において、ＳＳＤ＃０（２０−０）〜ＳＳＤ＃３（２０−３）はそれぞれ、ＳＳＤ２１がストレージコントローラ１０に提供している論理アドレス空間（ＬＢＡ空間）を表している。ＳＳＤ＃０（２０−０）〜ＳＳＤ＃３（２０−３）の上端が、論理アドレス空間の先頭アドレス（ＬＢＡ＝０）を表し、下端が論理アドレス空間の終端である。ストレージコントローラ１０は、複数（図５の例では４つ）のＳＳＤ２０から１つのＲＡＩＤグループ３０を構成し、ＲＡＩＤグループ３０に所属する各ＳＳＤ２１の論理アドレス空間（ＳＳＤ＃０（２０−０）〜ＳＳＤ＃３（２０−３））を、ストライプブロック（３０１）と呼ぶ複数の固定サイズの記憶領域に分割して管理している。【００５９】
また図５では、ＲＡＩＤグループ３０のＲＡＩＤレベル（ＲＡＩＤ技術におけるデータ冗長化方式を表すもので、一般的にはＲＡＩＤ１〜ＲＡＩＤ６のＲＡＩＤレベルがある）がＲＡＩＤ５である場合の例を表している。図５において、ＲＡＩＤグループ３０内の、「０」、「１」、「Ｐ」などのボックスがストライプブロックを表しており、ストライプブロックのサイズはたとえば、６４ＫＢ、２５６ＫＢ、５１２ＫＢなどである。また、各ストライプブロックに付されている、「１」等の番号のことを、「ストライプブロック番号」と呼ぶ。【００６０】
図５で、ストライプブロックのうち、「Ｐ」と記載されているストライプブロックは、冗長データ（パリティ）の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、数字（０、１等）が記載されているストライプブロックは、ホスト２などの上位装置から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。【００６１】
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセット（たとえば図５中の要素３００）のことを、「ストライプライン」と呼ぶ。本実施例に係るストレージ装置１の場合、図５に示されているストライプライン３００のように、１つのストライプラインに属する各ストライプブロックは、ＳＳＤ＃０（２０−０）〜ＳＳＤ＃３（２０−３）上の同じ位置（アドレス）に存在するという規則で、ストライプラインが構成される。【００６２】
さらにストレージコントローラ１０は、ＲＡＩＤグループ内に連続配置される複数のストライプラインを「チャンク」と呼ばれる管理単位で管理する。図５に示されているように、１つのチャンク３１は、複数のストライプラインを有する。ただし１つのチャンク３１が１つのストライプラインのみを有する構成でもよい。【００６３】
またストレージコントローラ１０は、ホスト２にはＲＡＩＤグループの記憶領域とは異なる、１以上の仮想的な記憶空間を提供する。この仮想的な記憶空間を「仮想ボリューム」と呼ぶ。仮想ボリュームの記憶空間も、所定サイズの領域ごとに分割管理される。この所定サイズの領域は「仮想チャンク」と呼ばれる。仮想チャンクとは、仮想ボリュームの記憶領域の割り当て単位である。【００６４】
１つの仮想チャンクには１つのチャンクがマップされ、ホスト２から仮想チャンクに対するデータライトがあった時、マップされたチャンクにデータが格納される。ただし、仮想チャンクにチャンクがマップされる時、チャンク内のデータストライプのみがマップされる。そのため、仮想チャンクのサイズは、チャンクに含まれる全データストライプの合計サイズに等しい。ストレージコントローラ１０は、後述する仮想ボリューム管理テーブル５００に、仮想チャンクとチャンクのマッピングを記録することで、仮想チャンクに割り当てられる記憶領域（チャンク）を管理している【００６５】
仮想ボリュームが定義された直後は、仮想ボリュームの各仮想チャンクには、チャンクがマップされていない。ストレージコントローラ１０は、ホスト２から仮想チャンク上の領域に対するライト要求を受信した時にはじめて、当該領域に対してライトされたデータの書き込まれるべき、ＳＳＤ２１の論理アドレス空間上の記憶領域（チャンク）を決定する。ここで決定されるチャンクは、まだどの仮想チャンクにも割り当てられていないチャンク（未使用チャンク）のなかから１つのチャンクが決定される。【００６６】
図６は、仮想ボリュームとＲＡＩＤグループ、プールの関係を表す図である。【００６７】
本実施例に係るストレージ装置１では、ある仮想ボリュームの仮想チャンクに割り当て可能なチャンクには、所定の制約がある。仮想チャンクに割り当て（マップ）可能な記憶領域（チャンク）を有する１または複数のＲＡＩＤグループは、プールという管理単位で管理される。ストレージ装置１は１以上のプールを管理可能であり、ストレージ装置１が複数のプールを管理する場合、仮想チャンクに割り当て可能な記憶領域を有する１または複数のＲＡＩＤグループは、複数のプールのうちいずれか１つのプールで管理される。以下、あるプール（仮にプールＸと呼ぶ）で管理されるＲＡＩＤグループ（及びこのＲＡＩＤグループ内のチャンク）のことを、「プールＸに属するＲＡＩＤグループ（及びチャンク）」と呼ぶ。また、各仮想ボリューム（の仮想チャンク）にチャンクが割り当てられる場合、割り当て可能なチャンクが属するプールは、あらかじめ仮想ボリュームごとに１つに定められている。【００６８】
図７は、ストレージコントローラのメモリに格納される管理情報の内容を表す図である。【００６９】
ストレージコントローラ１０のメモリ１４には、少なくとも仮想ボリューム管理テーブル５００、プール管理テーブル５５０、ＲＡＩＤグループ管理テーブル６５０が存在する。以下で、これらの管理テーブルの内容について説明していく。【００７０】
図８は、仮想ボリューム管理テーブルの構成を説明する図である。【００７１】
仮想ボリューム管理テーブル５００は、ストレージ装置１内に定義された各仮想ボリューム内の仮想チャンクと、チャンクとのマッピング関係を管理するためのテーブルである。仮想ボリューム管理テーブル５００は仮想ボリューム＃５０１、プール＃５０２、仮想ボリュームＬＢＡ範囲５０３、仮想チャンク番号５０４、ＲＡＩＤグループ番号５０５、チャンク番号５０６のカラムを有する。仮想ボリューム管理テーブル５００の各行（レコード）は、仮想ボリューム＃５０１及び仮想チャンク番号５０４により特定される仮想チャンクに対し、ＲＡＩＤグループ番号５０５及びチャンク番号５０６で特定されるチャンクがマッピングされていることを表す。なお、以降では、仮想ボリューム管理テーブル５００に限らず、各種情報を管理するテーブルの各行のことを「レコード」と呼ぶ。【００７２】
また初期状態では、仮想チャンクにチャンクはマッピングされていない。仮想チャンクに対するライト要求をホスト２から受け付けた時点で、仮想チャンクにチャンクがマッピングされる。仮想チャンク番号５０４で特定される仮想チャンクに対してチャンクがマッピングされていない場合、当該レコードのＲＡＩＤグループ番号５０５及びチャンク番号５０６には無効値（ＮＵＬＬ）が格納される。【００７３】
またプール＃５０２は、仮想ボリュームに割り当て可能なチャンクの属するプールの識別番号が格納される。つまり、仮想ボリューム＃５０１で特定される仮想ボリュームの仮想チャンクに割り当て可能なチャンクは原則として、プール＃５０２に属するチャンク（またはＲＡＩＤグループ）に限定される。また仮想ボリュームＬＢＡ範囲５０３は、仮想チャンク番号５０４で特定される仮想チャンクが、仮想ボリューム上のどの範囲に相当する領域であるかを表す情報である。一例として、図８の行（レコード）５００−１では、仮想ボリュームＬＢＡ範囲５０３は“０ｘ０５００〜０ｘ０９ＦＦ”、仮想チャンク番号５０４は“２”であるから、仮想ボリューム＃０の仮想チャンク＃２は、仮想ボリューム＃０のＬＢＡが０ｘ０５００〜０ｘ０９ＦＦの領域に相当することを表している。【００７４】
図９は、プール管理テーブルの構成を説明する図である。【００７５】
プールは、プール管理テーブル５５０によって管理される。プール管理テーブル５５０は、プール＃５５１、ＲＧ＃５５２、チャンク＃５５３、ＲＡＩＤグループＬＢＡ５５４、ステータス５５５、プール残容量５５６のカラムを有する。プール管理テーブル５５０において、各レコードはチャンクについての情報を格納するためのものである。各レコードのＲＧ＃５５２は、チャンクの属しているＲＡＩＤグループのＲＡＩＤグループ番号を表し、プール＃５５１は、チャンクの属しているプールのプール番号を表す。さらにプール＃５５１は、ＲＧ＃５５２で特定されるＲＡＩＤグループの属するプール番号を表しているともいえる。【００７６】
また、各レコードのＲＡＩＤグループＬＢＡ５５４は、チャンクがＲＡＩＤグループ上のどの範囲に位置づけられているかを表す情報である。ステータス５５５は、チャンクが仮想チャンクに割り当てられているか（マップされているか）否かを表す情報である。ステータス５５５に「割当済」が格納されている場合、チャンクが仮想チャンクに割り当てられていることを表す。逆にステータス５５５に「未割当」が格納されている場合、チャンクが仮想チャンクに割り当てられていないことを意味する。また、ステータス５５５に「割当不可」が格納されている場合、チャンクを仮想チャンクに割り当てることが出来ないことを意味する。具体的には、ＳＳＤの容量縮退にともない、データの格納が出来なくなった（もしくは、ストレージコントローラ１０がデータの格納をやめた）チャンクである。プール残容量５５６は、ステータス５５５が「未割当」のチャンクの合計サイズである。プール残容量５５６はまた、プールの未使用容量とも呼ばれる。【００７７】
図１０は、ＲＡＩＤグループ管理テーブルの構成を説明する図である。【００７８】
ＲＡＩＤグループは、ＲＡＩＤグループ管理テーブル６５０によって管理される。ＲＡＩＤグループ管理テーブル６５０は、ＲＧ＃６５１、ドライブ番号６５２、ＲＡＩＤグループＬＢＡ６５３、ＲＡＩＤレベル６５４、ドライブ容量６５５、ＲＡＩＤグループ残容量６５６のカラムを有する。ＲＧ＃６５１にはＲＡＩＤグループのＲＡＩＤグループ番号が格納され、ドライブ番号６５２には、ＲＧ＃６５１で特定されるＲＡＩＤグループに属するＳＳＤ２１の識別子が格納される。ＲＡＩＤグループＬＢＡ６５３には、ドライブ番号６５２で特定されるＳＳＤ２１の各領域が、ＲＡＩＤグループ上のどの領域に位置づけられるかを表す情報である。【００７９】
ＲＡＩＤレベル６５４は、当該のＲＡＩＤグループのＲＡＩＤ構成を示している。ドライブ容量６５５には、ドライブ番号６５２で特定される記憶デバイス（ＳＳＤ２１）の論理容量が格納される。なお、ドライブ容量６５５は、容量縮退により変化し得る。ＲＡＩＤグループ残容量６５６は、ＲＡＩＤグループの未使用部分の合計値、つまりＲＡＩＤグループの領域のうち仮想チャンクにマップされていない部分の合計値である。【００８０】
図１１は、ＳＳＤコントローラのメモリに格納される管理情報の内容を表す図である。【００８１】
ＳＳＤ２１のメモリ２０４には少なくとも、論理物理変換テーブル１１００、ブロック管理テーブル１１５０、ＦＭエラー特性テーブル１２００、構成情報管理テーブル１３００、ＦＭ寿命特性テーブル１４００が格納される。【００８２】
図１２は、構成情報管理テーブルの構成を説明する図である。【００８３】
構成情報管理テーブル１３００は、ＳＳＤ２１の容量に関する情報を格納している。構成情報管理テーブル１３００は、総物理容量１３０１、論理容量１３０２、予備容量１３０３、閉塞済容量１３０４、最小予備容量１３０５のカラムを有する。総物理容量１３０１は、ＳＳＤ２１が有するＦＭチップの合計容量である。論理容量１３０２は、ＳＳＤ２１がユーザやストレージコントローラ１０に対して現在提供している論理容量である。予備容量１３０３は、ＳＳＤ２１の現時点の予備容量のサイズである。閉塞済容量１３０４は、現時点で閉塞状態となっているＦＭチップのブロックの合計サイズである。最小予備容量１３０５は、ＳＳＤ２１がリクラメーションを実行するために最低限必要な予備容量のサイズである。すなわち、図１２では、当該のＳＳＤは合計３．０ＴＢ分の物理容量を有しており、現時点で、１．６ＴＢの容量を論理容量としてユーザやストレージコントローラ１０に提供していることを示している。さらに当該のＳＳＤは、現時点で１．０ＴＢの予備容量を有しており、既に０．４ＴＢのブロックが閉塞状態にあることを示している。【００８４】
図１３は、論理物理変換テーブルの構成を説明する図である。本実施例に係るＳＳＤ２１は、複数のＦＭチップ２１０を有する。ＳＳＤ２１は全ＦＭチップ２１０内の各ブロックに対し、ＳＳＤ２１内で一意な識別番号を付して管理しており、この識別番号はブロック番号（ブロック＃）と呼ばれる。また、ブロック内の各ページには、ブロック内で一意な番号を付して管理しており、この番号は物理ページ番号（または物理ページ＃）と呼ばれる。ブロック＃と物理ページ＃が特定されることにより、ＳＳＤ２１内の物理ページが一意に特定される。【００８５】
またＳＳＤ２１は、ＳＳＤ２１が有する論理アドレス空間を、所定のサイズの領域に分割して管理している。この領域のことを、「論理ページ」と呼ぶ。各論理ページは、ＳＳＤ内で一意な識別番号が付されている。この識別番号は論理ページ番号（論理ページ＃）と呼ばれる。論理物理変換テーブル１１００は、ＳＳＤ２１の管理する論理ページと物理ページのマッピングを管理するためのテーブルで、論理物理変換テーブル１１００には、論理ページにマッピングされる物理ページの、ブロック＃と物理ページ＃の情報が、論理ページごとに格納されている。【００８６】
論理物理変換テーブル１１００は、図１３に示されているように、ＳＳＤ  ＬＢＡ１１０１、論理ページ＃１１０２、ステータス１１０３、ブロック＃１１０４、物理ページ＃１１０５のカラムを有する。論理物理変換テーブル１１００の各レコードには、論理ページ＃１１０２で特定される論理ページについての情報が格納される。ＳＳＤ  ＬＢＡ１１０１には、論理ページに対応する、ＳＳＤ２１がストレージコントローラ１０に提供している論理アドレス空間上のＬＢＡ（の範囲）が格納される。ＳＳＤ２１がストレージコントローラ１０からアクセス要求を受信すると、ＳＳＤ２１は、ＳＳＤ  ＬＢＡ１１０１と論理ページ＃１１０２を用いて、アクセス要求に含まれているＬＢＡを、論理ページ＃に変換することができる。そして、ブロック＃１１０４、物理ページ＃１１０５にはそれぞれ、論理ページにマッピングされる物理ページを特定するための情報（つまりブロック＃と物理ページ＃）が格納される。【００８７】
ステータス１１０３は、論理ページに物理ページがマッピングされているか否かを表す情報が格納される。ＳＳＤ２１の論理ページには、初期状態では物理ページはマッピングされていない。ストレージコントローラ１０からライト要求を受信した時点で、ライト要求でライト対象となる論理ページに対して物理ページがマッピングされる。ステータス１１０３に「割当」が格納されている場合、物理ページが論理ページにマッピングされていることを表す。逆にステータス１１０３に「未割当」が格納されている場合、物理ページが論理ページにマッピングされていないことを意味する（この時、論理ページに対応するブロック＃１１０４と物理ページ＃１１０５にはＮＵＬＬ（無効値）が格納される）。【００８８】
良く知られているように、一旦書き込みが行われた物理ページは上書きが不可能である（物理ページの上書きをしたい場合、物理ページの属するブロック全体を一度消去する必要がある）。そのためＳＳＤ２１では、ある論理ページに対する更新（上書き）要求をストレージコントローラ１０から受信すると、更新データを、更新前データの書き込まれている物理ページ（旧物理ページと呼ぶ）とは異なる物理ページ（新物理ページと呼ぶ）に格納する。そして更新対象となる論理ページに対応する、ブロック＃１１０４と物理ページ＃１１０５に、新物理ページのブロック＃、物理ページ＃を格納する。【００８９】
図１４は、ブロック管理テーブルの構成を説明する図である。【００９０】
ブロック管理テーブル１１５０は、ブロック／物理ページの状態を管理するためのテーブルである。ブロック管理テーブル１１５０内の各レコードには、ＳＳＤ２１内の物理ページについての情報が格納される。ブロック管理テーブル１１５０は、ブロック＃１１５１、物理ページ＃１１５２、ステータス１１５３、エラービット数１１５４、ＷＲ時刻１１５５、ＷＲ後経過時間１１５６、消去回数１１５７のカラムを有する。【００９１】
ブロック＃１１５１、物理ページ＃１１５２は、ステータス１１５３はそれぞれ、論理物理変換テーブル１１００の、ブロック＃１１０４、物理ページ＃１１０５、ステータス１１０３と同じ情報である。つまりある物理ページが論理ページに割り当てられると、割り当てられた物理ページのブロック＃、物理ページ＃が、論理物理変換テーブル１１００のブロック＃１１０４及び物理ページ＃１１０５に格納され、ステータス１１０３に「割当」が格納される。そして同時に、割り当てられた物理ページのステータス１１５３（ブロック管理テーブル１１０５内の）にも、「割当」が格納される。論理ページに割り当てられていない物理ページのステータス１１５３には「未割当」または「未使用」が格納される。【００９２】
物理ページは、論理ページに割り当てられてデータの書き込みが行われた後、論理ページへの割り当てが解除されることがある。たとえばＳＳＤコントローラ２００が論理ページに対する上書きを行った場合である。その場合、上書き対象の論理ページに割り当てられていた物理ページは、論理ページへの割り当てが解除され、ステータス１１５３には「未割当」が設定される。【００９３】
一方論理ページに割り当てられておらず、かつ未書き込みの物理ページのステータス１１５３には「未使用」が設定される。ステータス１１５３が「未使用」の物理ページはデータの書き込みが可能な状態にあるが、ステータス１１５３が「未割当」の物理ページはデータの書き込み（上書き）はできない状態にある。ステータス１１５３が「未割当」の物理ページをデータの書き込みが可能な状態にするためには、リクラメーション処理により、その物理ページが属するブロックの消去を行う必要がある。消去が行われたブロック内の全物理ページのステータス１１５３は、「未使用」に変更される。【００９４】
また、ブロック管理テーブル１１５０のステータス１１５３には、「閉塞」と「閉塞（予約）」という状態が存在する。「閉塞」とは、当該のブロックまたは物理ページが閉塞状態にあり、現在使用されていない状態であることを示している。「閉塞（予約）」とは、当該ブロックまたは物理ページに閉塞処理が必要で、処理の実行待ちの状態であることを示している。具体的には、後述のＦＭ診断処理にて、当該のブロックが寿命到達間近と判断された場合に、ＳＳＤコントローラ２００は、当該のブロックのステータスを「閉塞（予約）」に変更し、実際の閉塞処理を実施した後に、ステータスを「閉塞」へ変更する。【００９５】
エラービット数１１５４には、後述するＦＭ診断処理が実行された時に発生したエラービット数が格納される。詳細はＦＭ診断処理の説明の際に説明する。ＷＲ時刻１１５５は、物理ページに対してライト（あるいは消去）が行われた最新の時刻が格納される（以下、「ＷＲ」とは、「ライト」を意味する）。またＷＲ後経過時間１１５６には、後述するＦＭ診断処理が実行された時に、物理ページが最後にライト（または消去）されてからの経過時間が格納される。消去回数１１５７には、ブロック消去の累積回数が格納される。【００９６】
図１５と図１６を用いて、ＦＭの特性について説明する。【００９７】
ＳＳＤ２１が物理ページにデータを格納する際、データからＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）を算出し、データとともにＥＣＣも物理ページに格納する。フラッシュメモリの特性として、物理ページへのデータの格納後、時間が経つにつれ、格納されたデータに含まれるエラーが増加する傾向がある。なお、ここでの「エラー」の意味を簡単に説明しておく。たとえばＳＳＤ２１がＦＭチップ上のある領域（１ビット領域とする）に“０”を格納したとしても、時間が経つにつれ、データ内容が“０”から“１”に変化してしまうことがある。本明細書ではこの現象を「エラーが発生した」と呼んでいる。また、エラーの発生した１ビット領域（またはエラーの発生した１ビット領域から読み出された１ビットのデータ）のことを「エラービット」と呼ぶ。エラーの発生する原因は、その領域が多数回書き替えられて劣化した、あるいはその領域の品質（格納されたデータ内容を維持する能力）が先天的に悪かった場合などがある。ただし物理ページに格納されるデータにはＥＣＣが付加されているため、データ読み出し時にエラーが含まれていても、読み出し対象領域に含まれているエラービットの数が所定数以下であれば、ＥＣＣを用いたデータ訂正が可能である。【００９８】
訂正可能なビット数の上限は、付加されるＥＣＣの強度（エラー訂正能力）に依存する。物理ページに格納されたデータに、ＥＣＣによる訂正が可能なビット数の上限（以下、これを「訂正限界閾値」と呼ぶ）を超える数のエラービットが含まれるようになると、そのデータは読み出し不可能になる。ＳＳＤコントローラ２００は、ある物理ページに格納されたデータに、あらかじめ定められた閾値以上のエラービットが含まれていた場合、その物理ページを含むブロックに格納されていたデータを、別のブロックに移動させる。本明細書では、この処理を「リフレッシュ処理」と呼ぶ。また、このあらかじめ定められた閾値のことを「リフレッシュ閾値」と呼ぶ。リフレッシュ閾値は、訂正限界閾値よりも小さい。【００９９】
リフレッシュ処理では、リフレッシュが必要と判断されたブロック（「移動元ブロック」と呼ぶ）からデータを読み出し、別のブロック（「移動先ブロック」と呼ぶ）にそのデータを書き込む。移動元ブロックからデータを読み出す際に、エラービットはＥＣＣを用いて訂正されるため、移動先ブロックにデータを書き込む際には、エラービットの発生数はリセットされる。これにより、データがＳＳＤ２１から読み出し不可能になる事態（アンコレクタブルエラーが発生する事態）を極力避けることができる。【０１００】
図１５は、ＦＭのライト後経過時間とエラービット数との関係を説明する図である。【０１０１】
一般的なＦＭの特性として、物理ページに格納されたデータに含まれるエラービットの数は、ライト後の経過時間とともに増加する傾向がある。図１５は、ＦＭの記憶領域（たとえば物理ページ）から読み出されたデータに含まれるエラービット数と、ライト後経過時間との関係を表したグラフの一例を示している。図１５の曲線は、ある２つのＦＭチップの物理ページに対してデータをライトして、時間ｔが経過した後、それぞれのページをリードした際に、検出されたエラービットの数をプロットしたグラフの一例である。グラフの横軸は、物理ページへのライト後の経過時間を表し、縦軸は物理ページのリードを行った際に検出されたエラービットの数（以下では、「エラービット検出数」と呼ぶ）を表す。【０１０２】
図１５から分かる通り、ライト後の経過時間が長くなるほど、リード時に検出されるエラービット数は単調増加する傾向がある。ただしこの特性は、ＦＭの品質や、消去回数などによって変化する。【０１０３】
図１５では、点線で示した（ａ）と（ａ）’のグラフは、高品質なＦＭ（仮に、ＦＭサンプル＃１とする）の特性例を示しており、一点鎖線で示した（ｂ）と（ｂ）’のグラフは、低品質なＦＭ（仮にＦＭサンプル＃２とする）の特性例を示している。（ａ）と（ｂ）は、消去回数がＮ回の状態であり、（ａ）’と（ｂ）’はより消去回数が進んだＭ回（Ｍ＞Ｎ）の状態を示している。【０１０４】
まず、品質の差について述べる。同じ消去回数Ｎ回の状態である、（ａ）と（ｂ）を比べると、同じ経過時間（ｔ１またはｔ２）で、低品質なＦＭ＃２（ｂ）には高品質なＦＭ＃１（ａ）よりも多くのエラービットが発生している。さらに、（ａ）は、ｔ１とｔ２のいずれの時刻においても、訂正限界閾値６０とリフレッシュ閾値６１を下回っているため、アンコレクタブルエラー発生の危険性は低い。しかし一方の（ｂ）は、時刻ｔ１の時点でリフレッシュ閾値６１を超過しており、さらに時刻ｔ２の時点では訂正限界閾値６０も超過しているため、時刻ｔ１の時点で、リフレッシュ処理を実施しなければ、（ｂ）はアンコレクタブルエラーが生じる可能性が大である。【０１０５】
次に、消去回数の影響について述べる。（ｂ）と（ｂ）’に着目すると、時刻ｔ１の時点で、（ｂ）’には（ｂ）よりも多くのエラービットが発生していることが判る。さらに、（ｂ）’は時刻ｔ１の時点で訂正限界閾値６０を超過しており、アンコレクタブルエラーの状態となることも判る。【０１０６】
このように、一般的に品質の悪いＦＭチップは、ライト後の経過時間に対するエラービットの検出数が多く（すなわち、エラー特性が悪い）、反対に、品質のよいＦＭチップは、ライト後の経過時間に対するエラービットの検出数が少ない（すなわち、エラー特性が良い）という傾向がある。また、ブロックの消去回数に対しては、消去回数が多くなるほど、エラー特性が悪化する傾向にある。【０１０７】
次に、ＦＭの消去回数とエラービット数の関係について説明する。図１６は、ＦＭの物理ページのリードを行った際に検出されたエラービット数と、その物理ページの属するブロックの消去回数の関係を表したグラフの一例である。【０１０８】
グラフの横軸は、ブロックの消去回数を表し、縦軸はエラービット検出数を表す。寿命閾値６１’は、ＳＳＤコントローラ２００が、ブロックが寿命に到達したと判断する閾値で、訂正限界閾値６０と等しい。また、閉塞閾値６２’は、ＳＳＤコントローラ２００が、当該のブロックが寿命間近であると判断する閾値であり、この閾値を超過したブロックは、閉塞されることとなる。本実施例に係るＳＳＤ２１では、リフレッシュ閾値６１と閉塞閾値６２’は等しい。【０１０９】
点線で示した（c）のグラフは、高品質なＦＭであるＦＭサンプル＃１の特性例を示しており、一点鎖線でしめした（d）のグラフは、低品質なＦＭであるＦＭサンプル＃２の特性例を示している。このように低品質なＦＭは高品質なＦＭに比べて、実際の消去回数が劣ることが判る。すなわち、低品質なＦＭ（d）は、Ｎ回の消去で寿命に到達するものの、高品質なＦＭ（c）はＭ回（Ｍ＞Ｎ）まで消去が可能である。【０１１０】
本実施例に係るＳＳＤ２１には、その特性を事前に把握済みのＦＭチップが用いられる。ただし各ＦＭチップ（またはブロック、ダイ）は、それらが同種（同一型番）のＦＭチップであったとしても同一の特性を有するわけではなく、ＦＭチップ（またはブロック、ダイ）ごとに特性のばらつきがある。そのため、本実施例に係るＳＳＤ２１では、その製造時（あるいは出荷時）に、いくつかのＦＭチップについて収集された特性情報を保持している。具体的には、本実施例に係るＳＳＤ２１の開発者・製造者は、ＳＳＤ２１に使用されるＦＭチップと同種（同一型番）のチップのうち、品質の異なるいくつかのＦＭチップを選択し、選択されたＦＭチップの特性（エラービット数とＷＲ後経過時間と消去回数の関係等）を事前に計測する（以下、ここで選択されたＦＭチップのことを「サンプルＦＭ」と呼ぶ）。そして各ＳＳＤ２１のＦＭエラー特性テーブル１２００やＦＭ寿命特性テーブル１４００に、事前に計測したサンプルＦＭの特性の情報を記録しておく。ＳＳＤ２１は運用が開始されると（ストレージコントローラ１０からのＩ／Ｏが開始されると）、検出したエラービットの数と、ＦＭエラー特性テーブル１２００の情報を比べることで、各ブロックの特性が、事前評価したどのサンプルＦＭの特性に近いかを判定し、各ブロックの品質を推定する。さらに、推定されたブロックの品質とＦＭ寿命特性テーブル１４００の情報に基づいて、ブロックの劣化具合を把握し、残寿命を予想することが出来る。【０１１１】
図１７は、ＦＭエラービット特性テーブルの構成を説明する図である。【０１１２】
ＦＭエラー特性テーブル１２００は、図１５のグラフに相当する情報を保持するためのテーブルであり、ブロック消去回数１２０１、サンプル＃１２０２、ＷＲ後の経過時間におけるエラービット数を格納する１２０３〜１２０５のカラムを有する。ブロック消去回数１２０１は、ブロックの消去回数を示している。サンプル＃１２０２は、ＳＳＤ２１が保持する、サンプルＦＭの特性情報の識別番号（サンプルナンバー）を示している。なお、図では、＃１から＃Ｎの、Ｎ個のサンプルデータを保持していることを示している。また、サンプル＃１２０２の値は、１が最も高品質なサンプルＦＭであり、Ｎが最も低品質なサンプルＦＭであることを示している。エラービット数１２０３は、ＷＲ後の経過時間が０秒から１秒未満の物理ページをリードした時に、各サンプルＦＭで発生したエラービット数を示している。同様にエラービット数１２０４はＷＲ後の経過時間が１秒からｋ秒未満の、エラービット数１２０５はＷＲ後の経過時間がｋ秒以上の場合における、各サンプルＦＭで発生したエラービット数をそれぞれ示している。なお、１２０３〜１２０５のＷＲ後経過時間の単位は秒でなくても良い。【０１１３】
なお、図１７では、エラー特性のパラメータとして、消去回数とＷＲ後の経過時間を用いたが、この他にもエラービット発生数に影響を及ぼす要因がある。たとえばＦＭチップの温度や、ページの種別（ＭＳＢページやＬＳＢページ）、または、ＦＭへデータの読み書きや消去を指示する際のパラメータ（例えば、ページアクセス時の低速/高速モードの指定（チップビジー時間が変化）や、ページリード時の読み出し電圧）などによっても、エラービット発生数は異なり得る。そのため別の実施形態として、エラービット検出数と、これらの情報（ＦＭチップの温度や、ページの種別、または、ＦＭへデータの読み書きや消去を指示する際のパラメータ等）の関係が、ＦＭエラー特性テーブル１２００に追加されても良い。【０１１４】
図１８は、ＦＭ寿命特性テーブルの構成を説明する図である。【０１１５】
ＦＭ寿命特性テーブルは、図１６のグラフに相当する情報を保持するためのテーブルであり、サンプル＃１４０１と、寿命判定閾値１４０２と、閉塞判定閾値１４０３のカラムを有する。サンプル＃１４０１は、ＳＳＤ２１が保持しているサンプルＦＭの特性情報のサンプルナンバーを示しており、ＦＭエラー特性テーブル１２００の、サンプル＃１２０２と対応している。寿命判定閾値１４０２は、各サンプルＦＭのブロックが寿命に到達した際のブロック消去回数である。つまり、ブロック内の物理ページのリード時に発生したエラービット数が図１６の寿命閾値６１’であった時のブロック消去回数である。閉塞判定閾値１４０３は、各サンプルでブロックの閉塞処理が必要と判断する際の消去回数であり、つまりブロック内の物理ページのリード時に発生したエラービット数が図１６の閉塞閾値６２’であった時のブロック消去回数である。【０１１６】
これ以降では、各処理のフローについて説明する。【０１１７】
図１９は、ストレージコントローラタスクのフローチャートである。ストレージコントローラ１０のＣＰＵ１１は、定期的にこのストレージコントローラタスクを実行する。以下では、ストレージコントローラ１０を主語として各処理の説明を行うが、特に断りのない限り、各処理はＣＰＵ１１で実行されることを意味する。【０１１８】
ストレージコントローラ１０は、ホスト計算機２からリード又はライトの要求を受信済みであるか否かを判定する（Ｓ１０）。何れの要求も受けていない場合（Ｓ１０：Ｎｏ）、ストレージコントローラ１０は、Ｓ２０へ進む。【０１１９】
リード又はライトの要求を受信済みの場合（Ｓ１０：Ｙｅｓ）、ストレージコントローラ１０は、この要求がリードコマンド又はライトコマンドの何れであるかを判定する（Ｓ４０）。この要求がリードコマンドであった場合（Ｓ４０：リードコマンド）、ストレージコントローラ１０は、リード処理を実行する（Ｓ５０）。この要求がライトコマンドであった場合（Ｓ４０：ライトコマンド）、ストレージコントローラ１０は、ライト処理を実行する（Ｓ６０）。リード処理、ライト処理の詳細については後述する（図２１、図２０参照）。またＳ５０またはＳ６０の処理の後、ストレージコントローラ１０はＳ２０の処理を行う。【０１２０】
Ｓ２０において、ストレージコントローラ１０は、ＳＳＤ２１からの容量縮退要求を受領しているか否かを判定する（Ｓ２０）。容量縮退要求なしと判断した場合（Ｓ２０：Ｎｏ）は、ストレージコントローラ１０は次にＳ３０の処理を行う。容量縮退要求ありと判断した場合（Ｓ２０：Ｙｅｓ）は、ストレージコントローラ１０は容量縮退処理を実行（Ｓ７０）した後、Ｓ３０の処理を行う。容量縮退処理の詳細については後述する（図２５参照）。【０１２１】
Ｓ３０において、ストレージコントローラ１０は、ストレージ装置１の停止要求を受信済みであるか否かを判定する（Ｓ３０）。ストレージ装置１の停止要求は、ユーザが管理ホスト５を用いて停止指示を発行することで、管理ホスト５から通知される。【０１２２】
停止の要求を受信済みの場合（Ｓ３０：Ｙｅｓ）、ストレージコントローラ１０は、ストレージ装置１の停止処理を実行し、処理を終了する。停止の要求を未受信の場合（Ｓ３０：Ｎｏ）、ストレージコントローラ１０は、Ｓ１０から処理を繰り返す。【０１２３】
図２０は、ストレージコントローラのライト処理のフローチャートである。この処理は図１９のＳ６０に相当する処理である。【０１２４】
ホスト２は、ストレージコントローラ１０に、ライト要求及びライトデータを送信する（Ｓ６１）。ストレージコントローラ１０は、ホスト２からライト要求を受信すると、仮想ボリューム管理テーブル５００及びプール管理テーブル５５０を参照し、そのライト要求が指定する仮想ボリュームのライト先のアドレスを含む仮想チャンクに、チャンクが割り当て済みであるか否かを判定する（Ｓ６２）。【０１２５】
そのライト先の仮想チャンクにチャンクが未割り当ての場合（Ｓ６２：Ｎｏ）、ストレージコントローラ１０は、プール管理テーブル５５０の中から、ステータス５５５が「未割当」のチャンク（未使用チャンク）を選択し、ライト先の仮想チャンクに選択された未使用チャンクを割り当てる。そしてストレージコントローラ１０は、仮想ボリューム管理テーブル５００とプール管理テーブル５５０の内容を更新する（Ｓ６３）。ライト先の仮想チャンクにチャンクが割り当て済みである場合（Ｓ６２：Ｙｅｓ）、ストレージコントローラ１０は、Ｓ６３は実行しない。【０１２６】
Ｓ６２、Ｓ６３の後、ストレージコントローラ１０は、ライトデータをキャッシュに格納し（Ｓ６４）、ライト先の記憶デバイスへライトコマンド及びライトデータを送信する（Ｓ６５）。なお、ここではライト要求で指定されているアドレスを、ライト先の記憶デバイス及びライト先のＳＳＤ２１内アドレスに変換する処理が必要だが、これは従来のストレージ装置で行われているアドレス変換と同様のため、説明を略す。そして、ストレージコントローラ１０は、ライト先の記憶デバイスからライト完了通知を受信する（Ｓ６６）。ストレージコントローラ１０は、ホスト２に、ライト要求に対する完了応答を送信する（Ｓ６７）。ホスト２は、ストレージコントローラ１０からライト要求に対する完了応答を受信し（Ｓ６８）、処理を終了する。【０１２７】
図２１は、ストレージコントローラのデータリード処理のフローチャートである。この処理は図１９のＳ５０に相当する処理である。ホスト２は、ストレージコントローラ１０に、リード要求を送信する（Ｓ５１）。ストレージコントローラ１０は、ホスト２からリード要求を受信すると、そのリード要求が指定する仮想ボリュームのアドレスを含む仮想チャンクを特定する。さらにストレージコントローラ１０は、仮想ボリューム管理テーブル５００を用いて、仮想チャンクに割り当てられているチャンクを特定し、またプール管理テーブル５５０、ＲＡＩＤグループ管理テーブル６５０を用いることにより、チャンクを構成する記憶デバイスの中から、リード先の記憶デバイスを特定する（Ｓ５２）。ストレージコントローラ１０は、その特定した記憶デバイスにリードコマンドを送信する（Ｓ５３）。【０１２８】
Ｓ５３の後、ストレージコントローラ１０は、その記憶デバイスからリードデータを受信し（Ｓ５４）、そのリードデータをキャッシュに格納する（Ｓ５５）。ストレージコントローラ１０は、ホスト２に、リード要求に対する完了応答及びリードデータを送信する（Ｓ５６）。ホスト２は、ストレージコントローラ１０から完了応答及びリードデータを受信し（Ｓ５７）、処理を終了する。【０１２９】
図２２は、ＳＳＤコントローラタスクのフローチャートである。ＳＳＤコントローラ２００のＣＰＵ２０１は、定期的にこのＳＳＤコントローラタスクを実行する。以下では、ＳＳＤコントローラ２００を主語として各処理の説明を行うが、特に断りのない限り、各処理はＣＰＵ２０１で実行されることを意味する。【０１３０】
ＳＳＤコントローラ２００は、上位装置であるストレージコントローラ１０からリードやライトの要求を受領したか否かを判定する（Ｓ１００）。要求を受領していない場合（Ｓ１００：Ｎｏ）、ＳＳＤコントローラ２００は、Ｓ１２０へ進む。上位装置からの要求を受領した場合（Ｓ１００：Ｙｅｓ）、ＳＳＤコントローラ２００は、要求の内容を判定する（Ｓ２２０）。【０１３１】
この要求がリードコマンドであった場合（Ｓ２２０：リードコマンド）、ＳＳＤコントローラ２００は、論理物理変換テーブル１１００の情報をもとに、リード対象のデータを格納する物理ページから、バッファにデータを転送し（Ｓ２４０）、次にバッファに格納したデータと、リードコマンドに係る処理の完了の通知（応答）を上位装置に転送する（Ｓ２６０）。その後、ＳＳＤコントローラ２００はＳ１２０に進む。この要求がライトコマンドであった場合（Ｓ２２０：ライトコマンド）、ＳＳＤコントローラ２００は、先ずライト対象のデータをバッファに格納し（Ｓ２８０）、次に、ブロック管理テーブル１１５０の情報をもとに、未使用の物理ページ（ステータス１１５３が「未使用」の物理ページ）を特定し、バッファに格納したデータを特定された物理ページに格納し、ライトコマンドに係る処理の完了の通知（応答）を上位装置に返送する（Ｓ３００）。ここでＳＳＤコントローラ２００は、論理物理変換テーブル１１００の内容の更新も行う。さらにＳＳＤコントローラ２００は、ブロック管理テーブル１１５０で管理されている物理ページのうち、今回データを格納した物理ページのステータス１１５３を「割当」に変更し、ＷＲ時刻１１５５（ブロック管理テーブル１１５０内にある）に、現在時刻（Ｓ３００実行時の時刻）を格納する。またＳＳＤコントローラ２００は、これまで論理ページにマッピングされていた物理ページのステータス１１５３を、「未割当」に変更する。その後、ＳＳＤコントローラ２００はＳ１２０以降の処理を実施する。【０１３２】
Ｓ１２０では、ＳＳＤコントローラ２００は、リクラメーション処理が必要か否かを判断する（Ｓ１２０）。リクラメーション処理の必要がない場合（Ｓ１２０：Ｎｏ）は、ＳＳＤコントローラ２００はＳ１６０へ進む。リクラメーション処理の必要がある場合（Ｓ１２０：Ｙｅｓ）、ＳＳＤコントローラ２００はリクラメーション処理を実行する（Ｓ１４０）。リクラメーション処理により消去が行われたブロックは、その消去回数１１５７に１が加算される。またリクラメーション処理は、未使用の物理ページ（またはブロック）が不足してきた時に行われる。そのためＳ１２０では、ＳＳＤコントローラ２００は未使用の物理ページ（またはブロック）の数が所定数を下回ったか否かの判定を行うことで、リクラメーション処理の要否を判定する。【０１３３】
Ｓ１６０では、ＳＳＤコントローラ２００はＦＭの診断処理を実行する（Ｓ１６０）。ＦＭ診断処理の詳細については後述する（図２３）。Ｓ１８０では、ＳＳＤコントローラ２００は、容量の縮退処理を実行する（Ｓ１８０）。容量の縮退処理については後述する（図２４）。【０１３４】
Ｓ２００において、ＳＳＤコントローラ２００は、ＳＳＤ２１の停止の要求を受信済みであるか否かを判定する（Ｓ２００）。ＳＳＤ２１の停止要求は、ストレージコントローラ１０から通知される。たとえばストレージコントローラ１０が管理ホスト５からストレージ装置１の停止要求を受信した時、ストレージコントローラ１０は各ＳＳＤ２１に停止要求を発行する。停止の要求を受信済みの場合（Ｓ２００：Ｙｅｓ）、ＳＳＤコントローラ２００は、ＳＳＤ２１の停止処理を実行し、処理を終了する。停止の要求を未受信の場合（Ｓ２００：Ｎｏ）、ＳＳＤコントローラ２００は、Ｓ１００から処理を繰り返す。【０１３５】
以上の処理により、ＳＳＤ２１は、ストレージコントローラ１０から送信されたライトデータの格納や、リードデータの読み出しをすることができる。また、ＦＭチップ２１０の状態を監視し、その結果に応じて、容量の縮退処理を実行することが出来る。【０１３６】
図２３は、ＦＭ診断処理（図２２  Ｓ１６０）のフローチャートである。【０１３７】
ＳＳＤコントローラ２００は、診断が必要なブロックが存在するか否かを判断する（Ｓ１６１）。例えば、前回ＦＭ診断処理を実行してから所定の時間が経過した場合に、診断が必要なブロックが存在すると判断してもよい。あるいは、ストレージコントローラ１０から、診断実行の指示などの特定のコマンドを受領した場合に、診断が必要なブロックが存在すると判断しても良い。さらに、ブロックの消去回数やページのアクセス回数がＮ回に到達したブロック（またはページ）が存在する場合など、特定のイベントが発生した場合に、診断が必要なブロックが存在すると判断しても良い。【０１３８】
診断が不要と判断した場合（Ｓ１６１：Ｎｏ）、ＳＳＤコントローラ２００は処理を終了する。診断が必要と判断した場合（Ｓ１６１：Ｙｅｓ）は、ＳＳＤコントローラ２００は診断が必要なブロックを１つずつ選択し、各ブロックについてＳ１６２以降の処理を繰り返し実施する。Ｓ１６２でＳＳＤコントローラ２００は、診断対象のブロックを選択し（Ｓ１６２）、診断対象ブロック内の物理ページのデータをリードする（Ｓ１６３）。Ｓ１６３で行われる物理ページのリード処理を、「検査読込」と呼ぶ。なお、Ｓ１６３では全ての物理ページをリードしてもよいが、一部のページのみをリードするようにしてもよい。一部のページのみをリードする場合には例えば、データを保持している物理ページ（ステータス１１５３が「割当」の物理ページ）のみ、または物理ページ番号が偶数や奇数などの特定のページのみを対象にするようにしても良い。また、検査読込の過程で、ＣＰＵ２０１は下流Ｉ／Ｆ２０３から、検査読込を行った物理ページにおいて発生したエラービット数、アンコレクタブルエラーの発生有無についての情報を通知される。【０１３９】
Ｓ１６４でＳＳＤコントローラ２００は、Ｓ１６３の検査読込によってアンコレクタブルエラーが発生した物理ページが存在するか否かを判断する。アンコレクタブルエラーは、ハードウェアの偶発的な故障等の要因で発生し得る。アンコレクタブルエラーが発生した物理ページが存在する場合には（Ｓ１６４：Ｙｅｓ）、ＳＳＤコントローラ２００はＳ１６９を実行する。Ｓ１６９でＳＳＤコントローラ２００は、論理物理変換テーブル１１００を参照することで、その物理ページは論理ページにマッピングされているか、つまりその物理ページにユーザデータが格納済みであるか判断する（Ｓ１６９）。【０１４０】
ユーザデータが格納済みでない場合（Ｓ１６９：Ｎｏ）、Ｓ１７０の処理は行われない。一方、Ｓ１６９でユーザデータが格納済みの場合（Ｓ１６９：Ｙｅｓ）、ＳＳＤコントローラ２００はストレージコントローラ１０に、アンコレクタブルエラーが発生した物理ページにマッピングされている論理ページのアドレス（ＳＳＤ  ＬＢＡ１１０１）を通知する（Ｓ１７０）。【０１４１】
またＳ１７０でＳＳＤコントローラ２００は、アンコレクタブルエラーが発生した物理ページを含むブロックの中に、論理ページにマッピングされている物理ページがある場合、その物理ページのデータを別のブロックの未使用物理ページに移動し、論理物理変換テーブル１１００、ブロック管理テーブル１１５０を更新する。ただしこの時、アンコレクタブルエラーが発生した物理ページについては、データ移動が行われない。アンコレクタブルエラーが発生した論理ページのアドレスを通知されたストレージコントローラ１０は、ＲＡＩＤ技術によるリビルド処理を実施することでその論理ページのデータを復旧し、復旧されたデータを論理ページに書き戻す。【０１４２】
Ｓ１７０の後、ＳＳＤコントローラ２００はＳ１７１の処理を行う。Ｓ１７１の処理は後述する。【０１４３】
Ｓ１６４でアンコレクタブルエラーが発生した物理ページが存在しない場合には（Ｓ１６４：Ｎｏ）、ＳＳＤコントローラ２００はＳ１６５以降の処理を実行する。Ｓ１６５では、ＳＳＤコントローラ２００は、検査対象の物理ページに発生していたエラービットの数と、その物理ページのデータライト後の経過時間、および、その物理ページが所属するブロックの消去回数などの統計的な情報と、メモリ２０４内に保持するＦＭエラー特性テーブル１２００、ＦＭ寿命特性テーブル１４００の情報をもとに、当該のブロックの品質と、劣化度を予想する（Ｓ１６５）。【０１４４】
ブロックの品質と劣化度の予測方法を説明する。まずＳＳＤコントローラ２００はブロック管理テーブル１１５０を参照することで、検査対象の物理ページのＷＲ時刻１１５５と現在時刻からライト後経過時間を算出する。続いてＳＳＤコントローラ２００は、検査対象の物理ページが属するブロックの消去回数１１５７を特定する。続いてＳＳＤコントローラ２００は、ブロックの消去回数とライト後経過時間と、物理ページのエラービット数をもとに、検査対象の物理ページ（が属するブロック）の特性が、ＦＭエラー特性テーブル１２００に格納されているどのサンプルデータに最も近いか判定する。たとえば検査対象の物理ページのライト後経過時間が０．５秒、エラービット数が２０回、そしてその物理ページが属するブロックの消去回数が１回の場合、この物理ページ（の属するブロック）の特性は、サンプル＃１２０２が“２”のサンプルデータ（行１２００−２）に最も近い。そのためこの場合には、ＳＳＤコントローラ２００は検査対象の物理ページは、サンプル＃１２０２が“２”のサンプルＦＭと同種の品質（特性）を持つと推定する。なお、Ｓ１６３にて複数の物理ページを検査対象とした場合には、例えばエラービット数の最悪値や平均値などを用いて、当該ＦＭの品質を推定しても良い。【０１４５】
続いてＳＳＤコントローラ２００は、ＦＭ寿命特性テーブル１４００を参照し、サンプル＃１４０１の値が先に特定されたサンプル＃１２０２と等しい行の閉塞判定閾値１４０３と、検査対象の物理ページが属するブロックの消去回数を用いることで、劣化度を算出する。本実施例において劣化度とは、
検査対象の物理ページが属するブロックの消去回数  ÷  閉塞判定閾値１４０３
で算出される値である。【０１４６】
そしてＳＳＤコントローラ２００は、Ｓ１６５の結果を元に、検査対象ブロックの劣化が進行しており寿命間近の状態にあるか否かを判断する（Ｓ１６６）。例えば、寿命間近の状態とは、検査対象ブロックの劣化度が１を超過する場合、つまり検査対象ブロックの消去回数が、閉塞判定閾値１４０３を上回っている場合である。Ｓ１６６にて、当該のブロックが寿命到達間近ではない（劣化度が１以下）と判断した場合（Ｓ１６６：Ｎｏ）、ＳＳＤコントローラ２００は、ブロック管理テーブル１１５０の、エラービット数１１５４やＷＲ後経過時間１１５６などのパラメータを更新した後（Ｓ１６８）、Ｓ１６１に戻る。Ｓ１６６にて、当該のブロックが寿命到達間近であると判断した場合（Ｓ１６６：Ｙｅｓ）、ＳＳＤコントローラ２００は当該のブロックに対して、データのリフレッシュ処理を行う（Ｓ１６７）。リフレッシュ処理に伴い、当該ブロックに格納されていたデータは別のブロックに移動される。もし当該ブロック内の物理ページのうち、論理ページにマッピングされている物理ページがあった時には、ＳＳＤコントローラ２００は、データ移動先の物理ページが論理ページにマッピングされるように、論理物理変換テーブル１１００、ブロック管理テーブル１１５０の内容の更新を行う。【０１４７】
Ｓ１７１では、ＳＳＤコントローラ２００は、Ｓ１６４にてアンコレクタブルエラーが発生していた物理ページを含むブロック、またはＳ１６６にて寿命到達間近と判断されたブロックに対して、ブロックの閉塞処理を予約する。具体的にはＳＳＤコントローラ２００は、閉塞対象のブロックについて、ブロック管理テーブル１１５０のステータス１１５３を「閉塞（予約）」に変更する。なお、本実施例に係るＳＳＤ２１では、閉塞はブロック単位に行われる。そのため、たとえばＳ１６４でアンコレクタブルエラーの発生した物理ページが検出された場合、その物理ページを含むブロック内の全物理ページについて、ステータス１１５３が「閉塞（予約）」に変更される。また、実際の閉塞処理は、後述の容量縮退処理（図２４）にて実施される。【０１４８】
ＳＳＤコントローラ２００は、Ｓ１７１の処理を実行した後、再びＳ１６１から処理を繰り返す。診断が必要なブロックがなくなるまで、この処理が実行される。【０１４９】
図２４は、ＳＳＤコントローラの容量縮退処理のフローチャートである。なお、以下では、ＳＳＤ２１の論理空間が縮退される場合、ＳＳＤ２１の論理アドレス空間の終端の領域から順に使用停止される例を説明する。たとえばＳＳＤ２１の論理容量がＤページ縮退される時、論理アドレス空間の終端の領域からＤページ分の領域が使用停止される。ここでの「使用停止」の意味は、使用停止対象の論理ページに物理ページがマッピングされている場合に、物理ページのマッピングを解除することである。【０１５０】
ＳＳＤコントローラ２００は、まず、閉塞が必要なブロックの有無を確認する（Ｓ１８１）。この確認は、ブロック管理テーブル１１５０のステータス１１５３が「閉塞（予約）」となっているブロックの有無を確認することで実施される。【０１５１】
Ｓ１８１にて、閉塞が必要なブロックがないと判断した場合（Ｓ１８１：Ｎｏ）、ＳＳＤコントローラ２００は、処理を終了する。閉塞が必要なブロックが存在すると判断した場合（Ｓ１８１：Ｙｅｓ）、ＳＳＤコントローラ２００はＳ１８２の処理を行う。Ｓ１８２でＳＳＤコントローラ２００は、当該ブロックの閉塞により、ブロックが枯渇するか否かを判断する（Ｓ１８２）。例えばブロックが枯渇する状態とは、予備容量はすでに最小予備容量にまで削減されている状態（たとえば図４の（c）の状態）で、かつブロックをこれ以上閉塞させると、論理容量が完全にゼロとなる場合や、論理容量の残量が特定の閾値を下回る場合などである。【０１５２】
Ｓ１８２にて、ブロックが枯渇すると判断した場合（Ｓ１８２：Ｙｅｓ）、ＳＳＤコントローラ２００は、これ以上の容量の縮小は困難であると判断し、ストレージコントローラ１０に対して、当該ＳＳＤの交換が必要な旨を通知する（Ｓ１８３）。この通知を受けたストレージコントローラ１０は、管理ホスト５の画面に、ＳＳＤ２１の交換が必要である旨のメッセージと交換対象のＳＳＤ２１の識別子等の情報を出力する等を行うことで、ストレージ装置１のユーザ（管理者）に当該ＳＳＤの交換を促す。その後、ＳＳＤコントローラ２００は、処理を終了する。一方、Ｓ１８２にて、ブロックが枯渇しないと判断した場合（Ｓ１８２：Ｎｏ）、ＳＳＤコントローラ２００は、ブロックの閉塞が可能であると判断し、Ｓ１８４以降の処理を行う。【０１５３】
Ｓ１８４では、ＳＳＤコントローラ２００は、論理容量の縮退が必要であるか（すなわち、予備容量がすでに最小予備容量にまで到達しているか）否かを、構成情報管理テーブル１３００の情報をもとに判断する（Ｓ１８４）。Ｓ１８４にて、論理容量の縮退は必要ない（すなわち、予備容量が最小予備容量に到達していない）と判断した場合（Ｓ１８４：Ｎｏ）、ＳＳＤコントローラ２００は当該のブロックを閉塞し、予備容量の縮退を実行する（Ｓ１８５）。なお、Ｓ１８５では、Ｓ１７１で閉塞の予約が行われたブロックのステータス１１５３が、「閉塞（予約）」から「閉塞」に変更される。以下では、Ｓ１８５（あるいはＳ１８８）でステータス１１５３が「閉塞」に変更されるブロックを、閉塞対象ブロックと呼ぶ。さらにＳ１８５では、予備容量１３０３から、閉塞対象ブロックの合計サイズが減算され、また閉塞済容量１３０４には閉塞対象ブロックの合計サイズが加算される。その後、ＳＳＤコントローラ２００は、処理を終了する。【０１５４】
Ｓ１８４にて、論理容量の縮退が必要である（すなわち、予備容量がすでに最小予備容量に到達している）と判断した場合（Ｓ１８４：Ｙｅｓ）、ＳＳＤコントローラ２００は、ストレージコントローラ１０に、容量縮退要求を通知する（Ｓ１８６）。このとき、ＳＳＤコントローラ２００は、ストレージコントローラ１０に対して、論理容量の変更予定サイズ（現在の論理容量から閉塞対象ブロックの合計サイズを減じた値）、または使用を制限するＬＢＡの範囲などを通知する。なお、図１９の説明の際に述べたとおり、容量縮退要求を受領したストレージコントローラ１０は、図２５に示す処理を実行することで、その可否を判断し、判断結果を含んだメッセージをＳＳＤコントローラ２００に返送する。ＳＳＤコントローラ２００は、ストレージコントローラ１０からメッセージが返送されて来るのを待つ。【０１５５】
ストレージコントローラ１０からのメッセージを受け取ったＳＳＤコントローラ２００は、Ｓ１８７にて、論理容量の縮退の実行可否を判断する（Ｓ１８７）。Ｓ１８７にて、ストレージコントローラ１０から縮退ＯＫのメッセージを受け取った場合（Ｓ１８７：Ｙｅｓ）、ＳＳＤコントローラ２００は、閉塞対象ブロックを閉塞し、さらに論理容量の縮退処理を実行する（Ｓ１８８）。Ｓ１８８の処理はＳ１８５と類似しているが、予備容量１３０３ではなく、論理容量１３０２が減算される点が、Ｓ１８５で行われる処理と異なる。また、論理容量１３０２の減算される量は、閉塞対象ブロックの合計サイズである。【０１５６】
また、論理容量の縮退に伴い、論理アドレス空間の終端のブロック（１または複数）が使用できなくなる。そのためＳＳＤコントローラ２００は、論理物理変換テーブル１１００で管理されている論理ページのうち、論理容量を超過する部分には物理ページがマッピングされていない状態に変更する。たとえば論理容量縮退後の論理容量が、Ｋページになる場合、ＳＳＤコントローラ２００は論理物理変換テーブル１１００の論理ページ＃１１０１がＫ以上の論理ページについて、そのステータス１１０３を「未割当」に変更し、ブロック＃１１０４、物理ページ＃１１０５をＮＵＬＬにする。また、ステータス１１０３が「未割当」に変更された論理ページに物理ページがマッピングされていた場合、ＳＳＤコントローラ２００はその物理ページについて、ブロック管理テーブル１１５０のステータス１１５３を「未割当」に変更する。その後、ＳＳＤコントローラ２００は処理を終了する。【０１５７】
Ｓ１８７にて、ストレージコントローラ１０から縮退ＮＧのメッセージを受け取った場合（Ｓ１８７：Ｎｏ）、ＳＳＤコントローラ２００は、当該ブロックの閉塞と、論理容量の縮退処理を中断し（Ｓ１８９）、処理を終了する。【０１５８】
図２５は、ストレージコントローラ１０で実施される容量縮退処理のフローチャートである。この処理は、ＳＳＤ２１から容量縮退要求を受領した時（図１９  Ｓ２０：Ｙｅｓ）に実施される。実施例１に係るＳＳＤ２１が通知する容量縮退要求には、論理容量縮退を実施した場合の論理容量の情報が含まれる。論理容量縮退を実施した場合の論理容量とは上で述べたとおり、現在のＳＳＤ２１の論理容量から閉塞対象ブロックの合計サイズを減じた値である。以下ではこの量を「縮退後論理容量」と呼ぶ。【０１５９】
なお、本実施例では、ＳＳＤ２１の論理容量がｎページ縮退されると、そのＳＳＤ２１の論理アドレス空間の終端の領域からｎページが使用停止される例を説明している。ＲＡＩＤグループについても同様で、ＲＡＩＤグループの終端領域から順に使用不可になる。【０１６０】
ストレージコントローラ１０は、まず、容量縮退要求を通知してきたＳＳＤ２１の縮退後論理容量を取得する（Ｓ７１）。以下、容量縮退要求を通知してきたＳＳＤ２１を「対象ＳＳＤ」と呼ぶ。続いてストレージコントローラ１０は、縮退後論理容量を元に対象ＳＳＤの属するＲＡＩＤグループの容量及び残容量と、使用不可となるチャンクの数（仮想チャンクに割り当てることができなくなるチャンク数）を算出する（Ｓ７２）。以下では、対象ＳＳＤの属するＲＡＩＤグループのことを「対象ＲＡＩＤグループ」と呼ぶ。【０１６１】
ＲＡＩＤグループの容量は、ＲＡＩＤグループを構成するＳＳＤ２１のうち、論理容量が最小のＳＳＤ２１の論理容量にＮ（ＮはＲＡＩＤグループを構成するＳＳＤ２１の数）を乗じることで算出される。またＲＡＩＤグループの容量を、１チャンクのサイズで割ることで、ＲＡＩＤグループ内で使用可能なチャンク数が算出できる（以下では、対象ＳＳＤの論理容量縮退後の、対象ＲＡＩＤグループ内で使用可能なチャンク数を“Ｃ”と表記する）。ストレージコントローラ１０は、現在対象ＲＡＩＤグループに定義されているチャンク数とＣの差を算出することで、削減が必要なチャンク数（仮想チャンクに割り当てることができなくなったチャンク数）を求めることができる。以下、仮想チャンクに割り当てることができなくなったチャンク数をＤと表記する。【０１６２】
さらに、仮想チャンクに割り当てることができなくなったチャンク数（Ｄ）を用いて、仮想チャンクに割り当てることができなくなったチャンクも求めることができる。論理容量縮退前に、対象ＲＡＩＤグループのチャンク＃５５３が１〜ｋのチャンクが使用可能（チャンクのステータス５５５が「割当済」または「未割当」）の状態にある場合、チャンク＃５５３が（ｋ−（Ｄ−１））〜ｋのチャンクが、仮想チャンクに割り当てることができなくなったチャンクである。以下ではこれらのチャンクを「移動対象チャンク」と呼ぶ。【０１６３】
Ｓ７３でストレージコントローラ１０は、仮想チャンクに割り当てることができなくなったチャンクがあるか判定する。Ｓ７３で、仮想チャンクに割り当てることができなくなったチャンクがあると判断された場合（Ｓ７３：Ｙｅｓ）、ストレージコントローラ１０はＳ７４に進み、対象ＲＡＩＤグループと同一のプールに存在する別のＲＡＩＤグループに十分な残容量があるか（所定の閾値以上の残容量、たとえば移動対象チャンク以上の残容量があるか）を判断する（Ｓ７４）。【０１６４】
Ｓ７４の判断にて、別のＲＡＩＤグループに、十分な残容量がないと判断した場合（Ｓ７４：Ｎｏ）、ストレージコントローラ１０はユーザにプールの容量追加を要求する（Ｓ８１）。具体的には、ストレージコントローラ１０は管理ホスト５の画面に、プールに新たなＲＡＩＤグループを追加する必要がある旨のメッセージを出力する等を行うことで、ストレージ装置１のユーザ（管理者）に、ＲＡＩＤグループの追加を促す。その後、ストレージコントローラ１０はＳ８２に進み、論理容量の縮退要求を通知してきたＳＳＤ２１に対して、縮退ＮＧのメッセージを送信する（Ｓ８２）。その後、ストレージコントローラ１０は処理を終了する。【０１６５】
一方、Ｓ７４にて、対象ＲＡＩＤグループと同一プールに属する別のＲＡＩＤグループに、十分な残容量があると判断した場合（Ｓ７４：Ｙｅｓ）、ストレージコントローラ１０は移動対象チャンクからデータを読み出して、別のＲＡＩＤグループの未使用チャンク（これを「移動先チャンク」と呼ぶ）にデータを移動する（Ｓ７５）。移動対象チャンクが仮想チャンクにマッピングされていた場合には、ストレージコントローラ１０は同時に、移動先チャンクが仮想チャンクにマッピングされるように、仮想ボリューム管理テーブル５００の内容を更新する。なお、移動対象チャンクの属しているＲＡＩＤグループのＲＡＩＤレベル６５４と、移動先チャンクの属しているＲＡＩＤグループのＲＡＩＤレベル６５４とは、同じでも良いし異なっていてもよい。両者のＲＡＩＤレベル６５４が異なっている場合には、データ移動の際に、パリティの再計算などが必要になる。【０１６６】
その後、ストレージコントローラ１０は移動対象チャンクが使用していた記憶領域を解放する。具体的には、ストレージコントローラ１０は、プール管理テーブル５５０中の、移動対象チャンクのステータス５５５を「割当不可」に変更する（Ｓ７６）。その後、ストレージコントローラ１０は、Ｓ７８へ進む。【０１６７】
Ｓ７６の終了後、またはＳ７３で仮想チャンクに割り当てることができなくなったチャンクはないと判断された場合（Ｓ７３：Ｎｏ）、ストレージコントローラ１０は、対象ＳＳＤのドライブ容量６５５を、Ｓ７１で取得した論理容量に更新する（Ｓ７７）。またストレージコントローラ１０は、ＲＡＩＤグループ残容量６５６をＳ７２で求めた値に更新する（Ｓ７８）。その後、ストレージコントローラ１０は、仮想チャンクに割り当てることができなくなったチャンクのステータス５５５を「割当不可」にするとともに、プール残容量５５６を更新し（Ｓ７９）、また論理容量の縮退要求を通知してきたＳＳＤ２１に対して、縮退ＯＫのメッセージを送信する（Ｓ８０）。その後、ストレージコントローラ１０は処理を終了する。【０１６８】
上で説明したように、実施例１に係るストレージ装置１は、寿命到達間近のブロックを検出し、アンコレクタブルエラーが発生する前にそのブロックのデータを別のブロックに移動して、容量縮退処理を行う。従来の容量縮退処理では、ブロックが読み出せなくなってから縮退が行われていたため、リビルド処理を行うことが必要であったが、実施例１に係るストレージ装置１では寿命到達間近のブロックを検出するため、リビルド処理の実行を不要にしている。【０１６９】
また、フラッシュメモリ等の記憶媒体は、必ずしも品質が均一ではないため、消去回数のみに基づいた寿命の判定を行うと、正確な寿命の判定ができないことがある。そのために、本実施例に係るＳＳＤでは、あらかじめ評価した、品質の異なる複数のサンプルＦＭのエラー特性情報（ＦＭエラー特性テーブル１２００）と寿命特性情報（ＦＭ寿命特性テーブル１４００）をＳＳＤ内に記録している。そしてＳＳＤが、ＳＳＤ内の各記憶領域（ブロック、物理ページ）の品質を判定する際、記憶領域を診断した時のエラー特性（エラービット数とＷＲ後経過時間）とサンプルＦＭのエラー特性とを比較することで、記憶領域の品質がどのサンプルＦＭの品質に近いか決定し、推定されたサンプルＦＭの寿命特性情報を用いて、診断対象の記憶領域の寿命を判定する。これにより、ＳＳＤ内に異なる品質の記憶媒体（ＦＭチップ）が混在している場合でも、正確に寿命を推定することができる。【０１７０】
また、ＳＳＤ２１の論理容量が縮小される時、当該ＳＳＤが属するＲＡＩＤグループの容量も削減される。ＲＡＩＤグループの容量を削減すると、そのＲＡＩＤグループは、削減された領域に存在していたデータを保持できなくなる。そのため、ストレージコントローラ１０は、ＳＳＤ２１の論理容量縮退の前に、縮退後論理容量に基づいて、当該ＳＳＤの属するＲＡＩＤグループから削減が必要となるチャンクを決定し、そのチャンクのデータを別のＲＡＩＤグループに移動する。つまりストレージコントローラ１０は、論理容量縮退が行われるＳＳＤから、論理容量縮退のために必要な量のデータ（少なくとも削減される論理容量以上のデータである）を別のＲＡＩＤグループのＳＳＤに移動することで、データ消失を防いでいる。【０１７１】
なお、上では、削減の必要なチャンク（仮想チャンクに割り当てることができなくなったチャンク）が存在し（Ｓ７３：Ｙｅｓ）、別のＲＡＩＤグループに空きがある場合（Ｓ７４：Ｙｅｓ）、削減の必要なチャンクのデータを全て別のＲＡＩＤグループに移動する例を説明した。ただし、Ｓ７３の判定において、ストレージコントローラ１０は、削減の必要なチャンクのうち、仮想チャンクに割り当てられているチャンク（ステータス５５５が「割当済」のチャンク）が存在するか否かを判定し、Ｓ７５で仮想チャンクに割り当てられているチャンクのみを、別のＲＡＩＤグループに移動するようにしてもよい。【０１７２】
なお、上で説明した容量縮退処理の例では、ＳＳＤ２１の容量を縮退させる際、ＳＳＤ２１の論理アドレス空間の終端領域から順に縮退させる例を説明した。そしてそれに伴い、ＳＳＤ２１の属するＲＡＩＤグループのチャンクも、ＲＡＩＤグループの終端領域にあるチャンクから順に使用不可（仮想チャンクへの割り当て不可）になった。ただし容量縮退の方法は、必ずしもこれに限定されない。容量縮退の際、ＳＳＤ２１の論理アドレス空間の任意の領域を縮退させてもよい。【０１７３】
たとえばＳＳＤ２１は容量縮退要求を行う時、縮退後論理容量に代えて、縮退対象となる論理アドレス空間の範囲をストレージコントローラ１０に通知する。ここで通知される論理アドレス空間の範囲は、任意の領域が通知されてよい。ストレージコントローラ１０は、ＳＳＤ２１から受領したアドレス範囲を含むチャンクを使用不可（仮想チャンクへの割り当て不可）にし、必要に応じてそのチャンクのデータを別のＲＡＩＤグループに移動すればよい。【０１７４】
また別の実施形態として、ストレージコントローラ１０が縮退対象の領域を決定してもよい。この場合、ストレージコントローラ１０はＳＳＤ２１から通知された縮退後論理容量をもとに、削除が必要なチャンク数を求め、その後削除対象のチャンクを決定する。このとき、任意のチャンクを削除対象としてよいが、仮想チャンクにマッピングされていないチャンクを削除対象とすることが望ましい。これはデータの移動が不要になるからである。削除対象のチャンク決定後、ストレージコントローラ１０は削除対象のチャンクに対応するＳＳＤ２１のＬＢＡの範囲を特定し、ＳＳＤ２１に対し、このＬＢＡの範囲を通知すればよい。
【実施例２】
【０１７５】
続いて実施例２に係るストレージ装置の説明を行う。実施例２に係るストレージ装置の構成は実施例１で説明したものと同じである。また、実施例２に係るＳＳＤのハードウェア構成も実施例１で説明したものと同じである。【０１７６】
実施例１では、ＳＳＤ２１がＦＭチップ２１０の品質と、寿命（消去可能回数）を予測する方法について説明した。しかし、実施例１では、ＦＭチップがハードウェア的な障害を突然起こすことで、データを失う可能性がある。そこで第２の実施例では、ＦＭチップの突発的なハード故障に対応するため、ＳＳＤ２１がＦＭチップをＲＡＩＤ構成で使用する例について説明する。【０１７７】
図２６は、第２の実施例に係る、ＳＳＤ内のデータ配置の説明図である。これは、図５のＲＡＩＤグループ３０をＳＳＤ２１に、ＳＳＤ＃０〜ＳＳＤ＃３をＦＭチップ＃０〜ＦＭチップ＃３にそれぞれ置き換えたものに等しい。なお、ＦＭチップ＃０〜ＦＭチップ＃３とは、ＦＭチップ２１０が有する記憶空間である。また図２６では、データとパリティの格納単位であるストライプブロックのサイズは、ページ２１２のサイズと等しい。ただしストライプブロックのサイズは、ページサイズの整数倍でもよい。あるいはブロック２１１やダイ２１３、ＦＭチップ２１０の容量の整数倍でも良い。【０１７８】
図２７は、第２の実施例に係る、ＳＳＤコントローラタスクのフローチャートである。ここでは、実施例１におけるＳＳＤコントローラタスク（図２２）との差分のみを説明する。【０１７９】
図２７では、図２２のＳ３００に代わって、Ｓ３２０とＳ３４０とが存在する。まず、Ｓ３２０ではＳＳＤコントローラ２００は、Ｓ２８０までの処理でバッファに格納されたライト対象のデータから、パリティを生成する。パリティの生成処理は、ＳＳＤコントローラ内のパリティ演算回路２０６で実施しても良いし、ＣＰＵ２０１でパリティ演算用のプログラムを実行することで実施しても良い（Ｓ３２０）。Ｓ３２０を実行した後、ＳＳＤコントローラ２００は、ライト対象のデータと、Ｓ３２０で作成したパリティをそれぞれ、物理ページに格納する（Ｓ３４０）。これ以外の処理は、図２２と同様である。【０１８０】
図２８は、第２の実施例に係る、ＦＭ診断処理のフローチャートである。こちらも、実施例１におけるＦＭ診断処理（図２３）との差分のみを説明する。【０１８１】
図２８では、図２３のＳ１７０に代わって、Ｓ１７２が存在する。Ｓ１７２では、ＳＳＤコントローラ２００はＳ１６４で検出したアンコレクタブルエラーの発生した物理ページに格納されていたデータを、ＲＡＩＤ技術を用いて（パリティを用いて）復旧させる（Ｓ１７２）。そして復旧されたデータを別の物理ページに格納し、論理ページと物理ページのマッピングを更新する（論理物理変換テーブル１１００の内容を更新する）。【０１８２】
以上が、実施例２に係るストレージ装置と実施例１に係るストレージ装置との、処理の相違点である。上で説明した以外の点については、実施例２に係るストレージ装置（及びＳＳＤ）で行われる処理は、実施例１で説明したものと同じである。実施例２に係るストレージ装置では、ＦＭチップのハードウェア的な突然障害により、アンコレクタブルエラーが発生したとしても、ＳＳＤ２１はＦＭチップに格納した冗長データを用いて、データを復旧できる。そのため、ＳＳＤのデータ保持能力をより高めることが出来、またストレージコントローラ１０でのリビルド処理の実施頻度を抑制できる。【０１８３】
なお、上では、ＦＭ診断処理時にアンコレクタブルエラーの発生した物理ページのデータの復旧を行う例を説明したが、ストレージコントローラ１０からリードコマンドを受領した時にデータの復旧を行ってもよい。つまり図２７のＳ２４０の実行時にアンコレクタブルエラーが発生した場合、ＳＳＤコントローラ２００は上で説明したＳ１７２の処理を行ってもよい。【０１８４】
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。【０１８５】
たとえば、上で説明した実施例では、ＳＳＤで構成されたＲＡＩＤグループのチャンクのデータを、同じくＳＳＤで構成されたＲＡＩＤグループに移動する態様について説明した。ただし、ストレージ装置にＳＳＤ以外の記憶デバイス、たとえばＨＤＤが接続されている場合、チャンクのデータを、ＨＤＤで構成されたＲＡＩＤグループに移動してもよい。【０１８６】
また、上で説明した実施例では、ＳＳＤがストレージコントローラに搭載された構成について説明したが、ホスト計算機に搭載されていてもよい。その場合ホスト計算機が、上で説明したストレージコントローラと同様の機能（たとえば容量仮想化機能）を有する必要がある。
【符号の説明】
【０１８７】
１：ストレージ装置，  ２：ホスト計算機，  ３：ＳＡＮ，  ５：管理ホスト，  １０：ストレージコントローラ，  １１：ＣＰＵ，  １２ホストＩ／Ｆ，  １３：デバイスＩ／Ｆ，  １４：メモリ，  １５：管理用Ｉ／Ｆ，  ２１：ＳＳＤ，  ２５：ＨＤＤ，  ２００：ＳＳＤコントローラ，  ２０１：ＣＰＵ，  ２０２：上流Ｉ／Ｆ，  ２０３：下流Ｉ／Ｆ，  ２０４：メモリ，  ２０５：内部接続スイッチ，  ２０６：パリティ演算回路，  ２１０：ＦＭチップ，  ２１１：ブロック，  ２１２：ページ，  ２１３：ダイ
【図１】
2016174729.tif 000003
【図２】
2016174729.tif 000004
【図３】
2016174729.tif 000005
【図４】
2016174729.tif 000006
【図５】
2016174729.tif 000007
【図６】
2016174729.tif 000008
【図７】
2016174729.tif 000009
【図８】
2016174729.tif 000010
【図９】
2016174729.tif 000011
【図１０】
2016174729.tif 000012
【図１１】
2016174729.tif 000013
【図１２】
2016174729.tif 000014
【図１３】
2016174729.tif 000015
【図１４】
2016174729.tif 000016
【図１５】
2016174729.tif 000017
【図１６】
2016174729.tif 000018
【図１７】
2016174729.tif 000019
【図１８】
2016174729.tif 000020
【図１９】
2016174729.tif 000021
【図２０】
2016174729.tif 000022
【図２１】
2016174729.tif 000023
【図２２】
2016174729.tif 000024
【図２３】
2016174729.tif 000025
【図２４】
2016174729.tif 000026
【図２５】
2016174729.tif 000027
【図２６】
2016174729.tif 000028
【図２７】
2016174729.tif 000029
【図２８】
2016174729.tif 000030
【国際調査報告】
2016174729.tif 000031
2016174729.tif 000032