"ネットワークを介して読み込み及び書き込み要求を送信するように構成されたクライアントコンピュータと、前記ネットワークに結合されて前記読み込み及び書き込み要求を受け取るように構成された、複数のストレージデバイスを含むデバイスグループ上に複数のデータ記憶位置を含むデータストレージサブシステムと、を備え、前記データストレージサブシステムは、ストレージコントローラをさらに備え、該ストレージコントローラは、データを記憶する際に使用するための第1のRAIDレイアウトを決定し、前記第1のRAIDレイアウトに従って、前記デバイスグループに第1のRAIDストライプを書き込み、第1の状態を検出したことに応答して、書き込むデータの量に関わらず、前記第1のRAIDレイアウトとは異なる第2のRAIDレイアウトを決定し、前記第2のレイアウトに従って、前記デバイスグループに第2のRAIDストライプを書き込む、ように構成され、これにより前記デバイスグループは、前記第1のRAIDレイアウト及び前記第2のRAIDレイアウトに従うデータを同時に記憶するようになる、ことを特徴とするコンピュータシステム。前記状態は、前記デバイスグループにデータを記憶するための空間を割り当てるべきであることを検出することを含む、ことを特徴とする請求項1に記載のコンピュータシステム。前記ストレージコントローラは、前記複数のストレージデバイスのうちの1又はそれ以上の特性に基づいて前記第1のRAIDレイアウト及び前記第2のRAIDレイアウトを決定するように構成される、ことを特徴とする請求項1に記載のコンピュータシステム。前記特性は、前記複数のデバイスのうちの1又はそれ以上へのアクセス数又はアクセス率、前記複数のデバイスのうちの1又はそれ以上に記憶されたデータの使用年数、前記複数のストレージデバイスのうちの1又はそれ以上における自由空間の量、割り当てられた前記空間に書き込まれるデータの予想寿命、前記複数のストレージデバイスのうちの1又はそれ以上に現在記憶されているデータの予想寿命、デバイスの使用年数、エラー率、エラー数、回復可能エラー数、回復不能エラー数、及び割り当て状態のうちの1又はそれ以上を含む、ことを特徴とする請求項3に記載のコンピュータシステム。前記ストレージコントローラは、前記複数のストレージデバイス内の保護データをシュレッドするようにさらに構成され、これにより前記データストレージコントローラは、少なくとも、所与のデータの保護レベルを変更すべきであると判断し、前記所与のデータに対応する保護データを記憶している特定の記憶位置を識別し、前記特定の記憶位置を割り当て解除する、ように構成されることを特徴とする請求項1に記載のコンピュータシステム。前記ストレージコントローラは、後続の書き込み中に、前記特定の記憶位置のうちの1又はそれ以上を、非保護データを記憶するために再割り当てするようにさらに構成される、ことを特徴とする請求項5に記載のコンピュータシステム。再割り当てされた特定の記憶位置は、前記保護データに使用していたものと同じサイズ又は配列を前記非保護データに使用しなくてもよい、ことを特徴とする請求項6に記載のコンピュータシステム。前記複数のストレージデバイスのうちのあるストレージデバイスは、データを消去ブロックサイズ単位で消去するように構成され、前記ストレージコントローラは、消去ブロックよりもサイズが小さなデータ部分へのアクセスに失敗したことを検出したことに応答して、前記失敗したデータ部分を含むデータの特定の消去ブロックサイズ部分を識別し、再生されたデータ部分を形成できなかった前記データ部分を再生し、前記ストレージデバイスが、前記再生されたデータ部分を含むデータの前記特定の消去ブロックサイズ部分を書き込むようにする、ように構成されることを特徴とする請求項1に記載のコンピュータシステム。前記ストレージコントローラは、あるデータ部分へのアクセスに失敗したことを検出したことに応答して、再生されたデータ部分を形成できなかった前記データ部分を再生し、前記複数のストレージデバイスのうちの特定のストレージデバイス内の保護データをシュレッドし、前記再生されたデータ部分を前記特定の記憶位置に記憶する、ように構成されることを特徴とする請求項1に記載のコンピュータシステム。前記ストレージコントローラは、前記複数のストレージデバイスのうちのあるストレージデバイスに、該ストレージデバイスが記憶しているデータ部分をリマップして書き換えるようにするコマンドを発行するようにさらに構成される、ことを特徴とする請求項1に記載のコンピュータシステム。コンピューティングシステムで使用するための方法であって、複数のストレージデバイスを含むデバイスグループ上に複数のデータ記憶位置を含むデータストレージサブシステムにおいて読み込み及び書き込み要求を受け取るステップと、データを記憶する際に使用するための第1のRAIDレイアウトを決定するステップと、前記第1のRAIDレイアウトに従って、前記デバイスグループに第1のRAIDストライプを書き込むステップと、第1の状態を検出したことに応答して、書き込むデータの量に関わらず、前記第1のRAIDレイアウトとは異なる第2のRAIDレイアウトを決定するステップと、前記第2のレイアウトに従って、前記デバイスグループに第2のRAIDストライプを書き込むステップと、を含み、これにより前記デバイスグループは、前記第1のRAIDレイアウト及び前記第2のRAIDレイアウトに従うデータを同時に記憶するようになる、ことを特徴とする方法。前記状態は、前記デバイスグループにデータを記憶するための空間を割り当てるべきであることを検出することを含む、ことを特徴とする請求項11に記載の方法。前記複数のストレージデバイスのうちの1又はそれ以上の特性に基づいて前記第1のRAIDレイアウト及び前記第2のRAIDレイアウトを決定するステップをさらに含む、ことを特徴とする請求項11に記載の方法。前記特性は、前記複数のデバイスのうちの1又はそれ以上へのアクセス数又はアクセス率、前記複数のデバイスのうちの1又はそれ以上に記憶されたデータの使用年数、前記複数のストレージデバイスのうちの1又はそれ以上における自由空間の量、割り当てられた前記空間に書き込まれるデータの予想寿命、前記複数のストレージデバイスのうちの1又はそれ以上に現在記憶されているデータの予想寿命、デバイスの使用年数、エラー率、エラー数、回復可能エラー数、回復不能エラー数、及び割り当て状態のうちの1又はそれ以上を含む、ことを特徴とする請求項13に記載の方法。前記複数のストレージデバイス内の保護データをシュレッドするステップをさらに含み、これにより前記方法は、所与のデータの保護レベルを変更すべきであると判断するステップと、前記所与のデータに対応する保護データを記憶している特定の記憶位置を識別するステップと、前記特定の記憶位置を割り当て解除するステップと、を含むことを特徴とする請求項11に記載の方法。後続の書き込み中に、前記特定の記憶位置のうちの1又はそれ以上を、非保護データを記憶するために再割り当てする、ことを特徴とする請求項15に記載の方法。再割り当てされた特定の記憶位置は、前記保護データに使用していたものと同じサイズ又は配列を前記非保護データに使用しなくてもよい、ことを特徴とする請求項16に記載の方法。前記複数のストレージデバイスのうちのあるストレージデバイスは、データを消去ブロックサイズ単位で消去するように構成され、前記方法は、消去ブロックよりもサイズが小さなデータ部分へのアクセスに失敗したことを検出したことに応答して、前記失敗したデータ部分を含むデータの特定の消去ブロックサイズ部分を識別するステップと、再生されたデータ部分を形成できなかった前記データ部分を再生するステップと、前記ストレージデバイスが、前記再生されたデータ部分を含むデータの前記特定の消去ブロックサイズ部分を書き込むようにするステップと、をさらに含むことを特徴とする請求項11に記載の方法。プログラム命令を記憶するコンピュータ可読記憶媒体であって、前記プログラム命令は、複数のストレージデバイスを含むデバイスグループ上における複数のデータ記憶位置を含むデータストレージサブシステムにおいて読み込み及び書き込み要求を受け取り、データを記憶する際に使用するための第1のRAIDレイアウトを決定し、前記第1のRAIDレイアウトに従って、前記デバイスグループに第1のRAIDストライプを書き込み、第1の状態を検出したことに応答して、書き込むデータの量に関わらず、前記第1のRAIDレイアウトとは異なる第2のRAIDレイアウトを決定し、前記第2のレイアウトに従って、前記デバイスグループに第2のRAIDストライプを書き込む、ように実行可能であり、これにより前記デバイスグループは、前記第1のRAIDレイアウト及び前記第2のRAIDレイアウトに従うデータを同時に記憶するようになる、ことを特徴とするコンピュータ可読記憶媒体。前記状態は、前記デバイスグループにデータを記憶するための空間を割り当てるべきであることを検出することを含む、ことを特徴とする請求項19に記載のコンピュータ可読記憶媒体。上記に鑑み、複数のソリッドステートストレージデバイス間でデータを効率的に分散し、エラーを検出して訂正するためのシステム及び方法が望まれている。複数のソリッドステートストレージデバイス間でデータを効率的に分散して管理するためのコンピュータシステム及び方法の様々な実施形態を開示する。1つの実施形態では、コンピュータシステムが、ネットワークを介して読み込み及び書き込み要求を受け取るように結合された1又はそれ以上のデータストレージアレイにネットワークを介して読み込み及び書き込み要求を伝達するように構成された複数のクライアントコンピュータを備える。複数のストレージデバイス上に複数の記憶位置を有する単複のデータストレージアレイを企図する。様々な実施形態では、このストレージデバイスが、データを記憶して保護するための独立ドライブ冗長アレイRAID構成で構成される。データストレージデバイスは、フラッシュメモリセルなどの、データ記憶のための固体メモリ技術を含むことができる。データストレージデバイスは、データを記憶する際に使用するための第1のRAIDレイアウトを決定し、この第1のRAIDレイアウトに従ってデバイスグループに第1のRAIDストライプを書き込むように構成されたストレージコントローラをさらに含む。このコントローラは、第1の状態を検出したことに応答して、第1のRAIDレイアウトとは異なる第2のRAIDレイアウトを決定し、この第2のレイアウトに従ってデバイスグループに第2のRAIDストライプを書き込むように構成され、これによりデバイスグループは、第1のRAIDレイアウト及び第2のRAIDレイアウトに従うデータを同時に記憶するようになる。様々な実施形態では、第1の状態が、デバイスグループにデータを記憶するための空間を割り当てるべきであることを検出することを含む。また、このコントローラが、複数のストレージデバイスのうちの1又はそれ以上のデバイスの特性に少なくとも部分的に基づいて、使用すべきRAIDレイアウトのタイプを決定する実施形態も企図される。以下の説明及び添付図面を検討すると、これらの及びその他の実施形態が明らかになるであろう。本発明は様々な修正及び代替形態が可能であるが、図面には特定の実施形態を一例として示し、本明細書ではこれらについて詳細に説明する。しかしながら、図面及びこれらに対する詳細な説明は、開示する特定の形態に本発明を限定することを意図するものではなく、むしろ添付の特許請求の範囲によって定められる本発明の思想及び範囲内にある全ての修正物、同等物及び代替物を含むことを意図するものであると理解されたい。以下の説明では、本発明を完全に理解できるように数多くの具体的な詳細を示す。しかしながら、当業者であれば、これらの具体的な詳細を伴わずに本発明を実施できると認識すべきである。いくつかの例では、本発明を曖昧にしないように、周知の回路、構造、信号、コンピュータプログラム命令及び技術については詳細に示していない。図1を参照すると、ネットワークアーキテクチャ100の1つの実施形態の汎用ブロック図を示している。後述するように、ネットワークアーキテクチャ100の1つの実施形態は、ネットワーク180を介して互いに、及びデータストレージアレイ120a~120bに相互接続されたクライアントコンピュータシステム110a~110bを含む。ネットワーク180は、スイッチ140を介して第2のネットワーク190に結合することができる。このネットワーク190を介して、クライアントコンピュータシステム110cが、クライアントコンピュータシステム110a~110b及びデータストレージアレイ120a~120bに結合される。また、ネットワーク190は、スイッチ150を介してインターネット160又はその他の外部ネットワークに結合することもできる。なお、代替の実施形態では、クライアントコンピュータ及びサーバ、スイッチ、ネットワーク、データストレージアレイ及びデータストレージデバイスの数及びタイプが、図1に示すものに限定されない。1又はそれ以上のクライアントは、様々な時点でオフライン動作することができる。また、動作中、ユーザがネットワークアーキテクチャ100への接続、切断及び再接続を行うと、個々のクライアントコンピュータの接続タイプが変化することもある。図1に示す構成要素の各々のさらなる説明を手短に行う。まず、データストレージアレイ120a~120bにより提供される機能のいくつかの概要について説明する。ネットワークアーキテクチャ100では、データストレージアレイ120a~120bの各々を、クライアントコンピュータシステム110a~110cなどの異なるサーバ及びコンピュータ間のデータの共有に使用することができる。また、データストレージアレイ120a~120bを、ディスクのミラーリング、バックアップ及び復元、保存データの保管及び検索、並びにストレージデバイス間のデータ移行に使用することもできる。代替の実施形態では、クラスタを形成するために、1又はそれ以上のクライアントコンピュータシステム110a~110cを、高速ローカルエリアネットワークLANを介して互いにリンクさせることができる。互いにリンクされた1又はそれ以上のノードはクラスタを形成し、これによりデータストレージアレイ120a~120bの1つに存在するクラスタ共有ボリュームなどのストレージリソースを共有することができる。データストレージアレイ120a~120bの各々は、データ記憶のためのストレージサブシステム170を含む。ストレージサブシステム170は、複数のストレージデバイス176a~176mを含むことができる。これらのストレージデバイス176a~176mは、クライアントコンピュータシステム110a~110cにデータ記憶サービスを提供することができる。ストレージデバイス176a~176mの各々は、読み込み及び書き込み要求を受け取るとともに、各々をアレイ内の行及び列としてアドレス指定可能な複数のデータ記憶位置を含むように構成することができる。1つの実施形態では、ストレージデバイス176a~176m内のデータ記憶位置を、論理的で冗長なストレージコンテナ又はRAIDアレイ低価格/独立ディスク冗長アレイ内に配置することができる。しかしながら、ストレージデバイス176a~176mは、ディスクを含まないこともある。1つの実施形態では、ストレージデバイス176a~176mの各々が、従来のハードディスクドライブHDDとは異なる技術をデータ記憶に利用することができる。例えば、ストレージデバイス176a~176mの1又はそれ以上は、永続データを記憶するための固体メモリから成るストレージを含み、又はこれにさらに結合することができる。他の実施形態では、ストレージデバイス176a~176mの1又はそれ以上が、スピン注入法、磁気抵抗ランダムアクセスメモリMRAM法、又はその他の記憶技術を利用するストレージを含み、又はこのようなストレージにさらに結合することができる。これらの異なる記憶技術により、ストレージデバイス間で異なる信頼性特性が生じ得る。ストレージデバイス176a~176mの各々において使用される技術及び機構のタイプにより、データオブジェクトマッピング、並びにエラー検出及び訂正に使用するアルゴリズムを決定することができる。これらのアルゴリズムで使用されるロジックを、基本オペレーティングシステムOS116、ファイルシステム140、ストレージサブシステムコントローラ174内の1又はそれ以上のグローバルRAIDエンジン178、及びストレージデバイス176a~176mの各々における制御ロジックのうちの1又はそれ以上に含めることができる。1つの実施形態では、含まれる固体メモリが、ソリッドステートドライブSSD技術を含む。通常、SSD技術は、フラッシュメモリセルを利用する。当業で周知のように、フラッシュメモリセルは、フローティングゲート内に捕捉され蓄積された電子の範囲に基づく二進値を保持する。完全に消去されたフラッシュメモリセルは、フローティングゲート内に電子を全く又は最低数しか蓄積していない。消去されたフラッシュメモリセルには、シングルレベルセルSLCフラッシュの二進1などの特定の二進値が関連付けられる。マルチレベルセルMLCフラッシュでは、消去されたフラッシュメモリセルに二進値11が関連付けられる。フラッシュメモリセル内の制御ゲートに所与の閾値電圧よりも高い電圧を印加した後、このフラッシュメモリセルは、フローティングゲート内に所与の範囲の電子を捕捉する。従って、プログラムされた書き込まれたフラッシュメモリセルには、SLCフラッシュの二進0などの別の特定の二進値が関連付けられる。MLCフラッシュセルでは、制御ゲートに印加された電圧に応じて、プログラムされたメモリセルに複数の二進値の1つを関連付けることができる。一般的に言えば、SSD技術では、読み込みアクセスレイテンシタイムがHDD技術よりも短い。しかしながら、SSDの書き込みパフォーマンスは、SSD内の未使用のプログラマブルブロックの利用可能性によって大きく影響を受ける。SSDの書き込みパフォーマンスは、SSDの読み込みパフォーマンスに比べて大幅に遅いので、同様のレイテンシを予想する一部の機能又は動作に関する問題が生じることがある。また、HDD技術とSDD技術の間の技術及び機構の違いにより、データストレージデバイス176a~176mの信頼性特性に違いが生じることがある。様々な実施形態では、SSD内のフラッシュセルに新たなデータが書き込まれる前に、一般にこのフラッシュセルを消去しなければならない。また、様々なフラッシュ技術における消去動作は、ブロック単位で行わなければならない。従って、ブロック消去セグメント又は消去ブロック内のフラッシュメモリセルは、全てまとめて消去される。フラッシュ消去ブロックは、複数のページを含むことができる。例えば、1ページのサイズが4キロバイトKBであり、1ブロックが64ページ、すなわち256KBを含むことができる。フラッシュデバイスでは、読み込み動作に比べて消去動作のレイテンシの方が相対的に高いことがあり、これにより対応する書き込み動作のレイテンシが増すことがある。フラッシュ技術のプログラミング又は読み込みは、消去ブロックサイズよりも低い粒度レベルで行うことができる。例えば、フラッシュセルには、バイトサイズ、単語サイズ又はその他のサイズでプログラム又は読み込みを行うことができる。フラッシュセルには、反復的な消去プログラム動作後に摩耗が生じる。この場合、この摩耗は、MLCフラッシュセルの基板とフローティングゲートの間の誘電酸化物層に注入され捕捉される電荷によるものである。1つの例では、MLCフラッシュセルが、10,000~100,000サイクルなどの、消去及びプログラム動作を受ける回数限界を有することができる。また、SSDには、別のフラッシュセルの消去又はプログラム中に隣接する又は近隣のフラッシュセルに偶発的状態変化を引き起こすプログラムディスターブエラーが生じることがある。さらに、SSDは、別のフラッシュセルの読み込み中に近隣のフラッシュセルの偶発的状態変化が生じるリードディスターブエラーも含む。1又はそれ以上のストレージデバイス176a~176mの各々の特性が分かると、より効率的なデータオブジェクトマッピング、並びにエラー検出及び訂正を行うことができる。1つの実施形態では、ストレージコントローラ174内のグローバルRAIDエンジン178が、ストレージデバイス176a~176mに関して、I/O要求の応答時間に一貫性がないこと、対応するアクセスに対するデータが誤っていること、エラー率及びアクセス率のうちの少なくとも1つ又はそれ以上を検出することができる。グローバルRAIDエンジン178は、少なくともこれらの特性に応答して、ストレージデバイス176a~176m内の対応するストレージデバイスグループにいずれのRAIDデータレイアウトアーキテクチャを利用すべきかを判断することができる。また、グローバルRAIDエンジン178は、ストレージデバイス176a~176mの特性に基づいて、デバイス内冗長スキーム及びデバイス間RAIDデータレイアウトを動的に変更することができる。図1に、1つの実施形態による、説明した特徴が可能なシステムの例を示す。さらなる詳細については以下で示す。以下、図1を参照しながら、ネットワークアーキテクチャ100の構成要素についてさらに説明する。ネットワークアーキテクチャの構成要素繰り返すが、図示のように、ネットワークアーキテクチャ100は、ネットワーク180及び190を介して互いに及びデータストレージアレイ120a~120bに相互接続されたクライアントコンピュータシステム110a~110cを含む。ネットワーク180及び190は、無線接続、直接ローカルエリアネットワークLAN接続、ストレージエリアネットワークSAN、インターネットなどの広域ネットワークWAN接続及びルータなどを含む様々な技術を含むことができる。ネットワーク180及び190は、1又はそれ以上のLANを含むことができ、これらは無線であってもよい。ネットワーク180及び190は、リモートダイレクトメモリアクセスRDMAハードウェア及び/又はソフトウェア、伝送制御プロトコル/インターネットプロトコルTCP/IPハードウェア及び/又はソフトウェア、ルータ、リピータ、スイッチ及び/又はグリッドなどをさらに含むことができる。ネットワーク180及び190内では、イーサネット登録商標、ファイバチャネル、ファイバチャネルオーバーイーサネットFCoE及びiSCSIなどのプロトコルを使用することができる。スイッチ140は、ネットワーク180及び190の両方に関連するプロトコルを利用することができる。ネットワーク190は、伝送制御プロトコルTCP及びインターネットプロトコルIP、すなわちTCP/IPなどの、インターネット160に使用される通信プロトコルの組と整合することができる。スイッチ150は、TCP/IPスイッチとすることができる。クライアントコンピュータシステム110a~110cは、デスクトップパソコンPC、ワークステーション、ラップトップ、ハンドヘルドコンピュータ、サーバ、サーバファーム、携帯情報端末PDA及びスマートフォンなどのあらゆる数の固定又はモバイルコンピュータを表す。一般的に言えば、クライアントコンピュータシステム110a~110cは、1又はそれ以上のプロセッサコアを備えた1又はそれ以上のプロセッサを含む。各プロセッサコアは、所定の汎用命令セットに従って命令を実行するための回路を含む。例えば、x86命令セットアーキテクチャを選択することができる。或いは、Alpha登録商標、PowerPC登録商標、SPARC登録商標又はその他のいずれの汎用命令セットアーキテクチャを選択してもよい。プロセッサコアは、データ及びコンピュータプログラム命令を求めてキャッシュメモリサブシステムにアクセスすることができる。キャッシュサブシステムは、ランダムアクセスメモリRAM及びストレージデバイスを含む記憶階層に結合することができる。クライアントコンピュータシステム内の各プロセッサコア及び記憶階層は、ネットワークインターフェイスにさらに接続することができる。クライアントコンピュータシステム110a~110cの各々は、ハードウェア構成要素に加え、記憶階層内に記憶された基本オペレーティングシステムOSを含むことができる。この基本OSは、例えば、MS-DOS登録商標、MS-WINDOWS登録商標、OS/2登録商標、UNIX登録商標、Linux登録商標、Solaris登録商標、又は別の公知のオペレーティングシステムなどの様々な特定のオペレーティングシステムのいずれかを表すことができる。従って、基本OSは、エンドユーザに様々なサービスを提供するとともに、様々なプログラムの実行をサポートするソフトウェアフレームワークを提供することができる。また、クライアントコンピュータシステム110a~110cの各々は、高水準バーチャルマシンVMをサポートするために使用されるハイパーバイザを含むことができる。当業者には周知のように、デスクトップ及びサーバ内で仮想化を使用して、OSなどのソフトウェアをシステムのハードウェアから完全に又は部分的に分離することができる。仮想化により、データストレージアレイ120a~120bの各々におけるストレージデバイス176a~176mに対応する論理装置番号LUNなどの論理記憶エンティティなどのように、各々が独自のリソースを有する同じ機械上で複数のOSが実行されているという錯覚をエンドユーザに与えることができる。データストレージアレイ120a~120bの各々は、クライアントコンピュータシステム110a~110cなどの異なるサーバ間のデータの共有に使用することができる。データストレージアレイ120a~120bの各々は、データを記憶するためのストレージサブシステム170を含む。ストレージサブシステム170は、複数のストレージデバイス176a~176mを含むことができる。これらのストレージデバイス176a~176mの各々は、SSDとすることができる。コントローラ174は、受け取った読み込み/書き込み要求を処理するためのロジックを含むことができる。例えば、少なくともコントローラ174において、手短に上述したアルゴリズムを実行することができる。受け取った書き込み要求などの動作のバッチ処理には、ランダムアクセスメモリRAM172を使用することができる。記憶媒体130に記憶された基本OS132、ファイルシステム134、いずれかのOSドライバ図示せず及びその他のソフトウェアは、ファイル及びLUNへのアクセスを可能にする機能を提供し、これらの機能を管理することができる。基本OS134及びOSドライバは、記憶媒体130上に記憶された、受け取った要求に対応する1又はそれ以上のメモリアクセス動作をストレージサブシステム170内で行うようにプロセッサ122により実行可能なプログラム命令を含むことができる。データストレージアレイ120a~120bの各々は、ネットワークインターフェイス124を使用してネットワーク180に接続することができる。1つの実施形態では、クライアントコンピュータシステム110a~110cと同様に、ネットワークインターフェイス124の機能をネットワークアダプタカード上に含めることができる。ネットワークインターフェイス124の機能は、ハードウェア及びソフトウェアの両方を使用して実装することができる。ネットワークインターフェイス124のネットワークカードによる実装上には、ランダムアクセスメモリRAM及び読み取り専用メモリROMの両方を含めることができる。1又はそれ以上の特定用途向け集積回路ASICを使用して、ネットワークインターフェイス124の機能を提供することができる。1つの実施形態では、ユーザデータ及び対応するエラー訂正符号ECC情報のデータレイアウトを最適化しようと努めるデータストレージモデルを作成することができる。1つの実施形態では、このモデルが、ストレージシステム内のストレージデバイスの特性に少なくとも部分的に基づく。例えば、ソリッドステートストレージ技術を利用するストレージシステムでは、特定のデバイスの特性を使用してこのストレージデバイスのためのモデルを作成するとともに、このモデルが、対応するデータストレージ構成アルゴリズムを通知する機能を果たすようにすることもできる。例えば、使用中の特定のストレージデバイスが、時間とともに信頼性の変化を示す場合、データストレージ構成を動的に変更する上でこのような特性を考慮することができる。一般的に言えば、コンピューティングシステムのために開発されるあらゆるモデルは不完全である。多くの場合、現実のシステムで所与のシステムを完全にモデル化するには、考慮すべき変数が単純に多すぎる。場合によっては、完全ではないが価値のあるモデルを開発することが可能な場合もある。以下でより詳細に説明するように、基礎を成すデバイスの特性に基づいてストレージシステムをモデル化する実施形態を説明する。様々な実施形態では、システムがどのように挙動し得るかに関するいくつかの予測に基づいてデータストレージ構成の選択が行われる。デバイスの挙動によっては、デバイスの特性の理解に基づいて、他のデバイスの挙動より予測しやすいものもある。しかしながら、デバイスの動作は時間とともに変化することがあり、これに応じて、選択したデータレイアウトも変化することがある。本明細書で使用するデバイスの特性とは、全体としてのデバイスの特性、チップ又はその他の構成要素などのデバイスの下位部分の特性、消去ブロックの特性、又はデバイスに関する他のあらゆる特性のことを意味することができる。デバイス内冗長性ここで図2を参照すると、動的デバイス内冗長スキームの1つの実施形態を示す汎用ブロック図を示している。当業者には周知のように、ストレージデバイス内の潜在的なセクタエラーの影響を低減するように複数のデバイス内冗長スキームの1つを選択することができる。通常、セクタという用語は、ディスク上の所与のトラック内のセグメントなどの、HDD上における基本記憶単位を意味する。ここでは、セクタという用語は、SSD上における基本的な割り当て単位アロケーションユニットを意味することもできる。SSD内のアロケーションユニットは、SSD内の1又はそれ以上の消去ブロックを含むことができる。図2を参照すると、ユーザデータ210は、エンドユーザが修正及びアクセスすべき記憶データ、並びにデバイス間エラー訂正符号ECCデータの両方を意味することができる。デバイス間ECCデータは、ユーザデータを保持する他のストレージデバイス上の1又はそれ以上のページから生成されたパリティ情報とすることができる。例えば、デバイス間ECCデータは、RAIDデータレイアウトアーキテクチャで使用されるパリティ情報とすることができる。ユーザデータ210は、ストレージデバイス176a~176kのうちの1又はそれ以上に含まれる1又はそれ以上のページ内に記憶することができる。1つの実施形態では、ストレージデバイス176a~176kの各々がSSDである。SSD内の消去ブロックは、複数のページを含むことができる。上述したように、1つの実施形態では、1ページが4KBのデータ記憶空間を含むことができる。1消去ブロックは、64ページ、すなわち256KBを含むことができる。他の実施形態では、消去ブロックが1メガバイトMBもの大きさであり、256ページを含むことができる。アロケーションユニットのサイズは、アロケーションユニットのオーバーヘッドトラッキングを低減するために、十分に大きなサイズの比較的少ないユニットが与えられるように選択することができる。1つの実施形態では、1又はそれ以上の状態テーブルが、アロケーションユニットの状態割り当て済み、空き、消去済み、エラー、摩耗レベル、及びアロケーションユニット内で発生した総エラー数訂正可能及び/又は訂正不能を維持することができる。様々な実施形態では、アロケーションユニットのサイズを、所与のデバイスが利用できるアロケーションユニットの数とアロケーションユニットを維持するオーバーヘッドとのバランスをとるように選択することができる。例えば、1つの実施形態では、アロケーションユニットのサイズを、SSDの総記憶容量の1/100パーセントとなるように選択することができる。ページ、消去ブロック及びその他の単位構成に関する他の量のデータ記憶空間も可能であり、企図される。ストレージデバイス内の所与のセクタ又はその他の記憶単位にアクセスできない場合、潜在的セクタエラーLSEが発生する。この所与のセクタでは、読み込み又は書き込み動作を完了できないことがある。また、訂正不能なエラー訂正符号ECCエラーが存在することもある。LSEは、所与のセクタがアクセスを受けるまで検出されないエラーである。従って、この所与のセクタに以前に記憶したあらゆるデータが失われる恐れがある。ストレージデバイスの不具合後のRAID再構成中に1つのLSEが生じた場合、これによりデータ損失に至る恐れがある。SSDでは、デバイスの使用年数、デバイスサイズ、アクセス率、ストレージの圧縮度、及び以前の訂正可能及び訂正不能なエラーの発生といった統計値のうちの少なくとも1つから、別のLSEの発生確率が増加することがある。所与のストレージデバイス内のLSE及びデータ損失を防ぐために、この所与のストレージデバイス内で多様なデバイス内冗長スキームの1つを使用することができる。デバイス内冗長スキームは、所与のストレージデバイス内で、パリティ情報などのECC情報を利用する。このデバイス内冗長スキーム及びそのECC情報は、所与のデバイスに対応し、所与のデバイス内に維持することができるが、デバイス自体が内部的に生成して維持できるECCとは異なる。一般的に言えば、デバイスの内部的に生成され維持されるECCは、このデバイスを含むシステムからは見えない。所与のストレージデバイスに含まれるデバイス内ECC情報を使用して、この所与のストレージデバイス内におけるデータ記憶の信頼性を高めることができる。このデバイス内ECC情報は、RAIDデータレイアウトアーキテクチャで利用されるパリティ情報などの、別のストレージデバイスに含めることができる他のECC情報に加えられる。極めて効果的なデバイス内冗長スキームは、所与のRAIDデータレイアウトの信頼性を十分に高めて、パリティ情報を保持するために使用されるデバイスの数を減少させることができる。例えば、各デバイス上のデータを保護するためにデバイス内冗長性が加わった場合、ダブルパリティRAIDレイアウトをシングルパリティRAIDレイアウトに置き換えることができる。一定レベルの記憶効率を得るためには、デバイス内冗長スキームにおける冗長性を高めると、所与のストレージデバイスの信頼性が高まる。しかしながら、このようにして冗長性を高めると、この所与のストレージデバイスの入力/出力I/O性能に関する不利点も増える可能性がある。1つの実施形態では、デバイス内冗長スキームが、デバイスを、ユーザデータを記憶するための一群の場所に分割する。例えば、ストライプ250a~250cによって示すような、RAIDレイアウト内のストライプに対応するデバイス内の一群の場所に分割することができる。ユーザデータ又はデバイス間RAID冗長性情報は、データ210によって示すように、ストレージデバイス176a~176kの各々の1又はそれ以上のページに記憶することができる。各ストレージデバイス内では、1又はそれ以上のページにデバイス内エラー回復データ220を記憶することができる。本明細書では、デバイス内エラー回復データ220をデバイス内冗長データ220と呼ぶことができる。当業者であれば周知のように、デバイス内冗長データ220は、データ210内の情報の選択した一部に対してある関数を実行することにより取得することができる。XORベースの演算を使用して、デバイス内冗長データ220に記憶すべきパリティ情報を導出することができる。デバイス内冗長スキームの他の例としては、シングルパリティチェックSPC、最大距離分離MDS消去符号、インタリーブパリティチェック符号IPC、ハイブリッドSPC及びMDS符号MDSSPC、及びカラム対角パリティCDPが挙げられる。これらのスキームは、データ220を計算する方法に応じて、もたらされる信頼性及びオーバーヘッドの点で異なる。このシステムは、上述の冗長性情報に加え、デバイス上の領域のチェックサム値を計算するように構成することもできる。例えば、デバイスに情報が書き込まれた時にチェックサムを計算することができる。このチェックサムは、システムによって記憶される。システムは、デバイスから情報が読み戻された時に再びチェックサムを計算し、これを最初に記憶した値と比較することができる。2つのチェックサムが異なる場合、情報が正しく読み込まれておらず、システムは、他のスキームを使用してデータを回復することができる。チェックサム機能の例には、巡回冗長検査CRC、MD5及びSHA-1がある。ストライプ250a~250cに示すように、所与のストライプ内にデータ210を記憶するために使用する幅、すなわちページ数は、ストレージデバイス176a~176kの各々において同じものとなり得る。しかしながら、ストライプ250b~250cに示すように、所与のストライプ内にデバイス内冗長データ220を記憶するために使用する幅、すなわちページ数は、ストレージデバイス176a~176kの各々において同じでない場合がある。1つの実施形態では、所与のストレージデバイスの特性又は挙動の変化により、対応するデバイス内冗長データ220を記憶するために使用する幅を少なくとも部分的に決定することができる。例えば、上述したように、フラッシュセルには、ページをプログラムすること又は読み込むことによって近隣のページに支障を来たし、これらの近隣のページ内にエラーを引き起こし得るプログラムディスターブエラー及びリードディスターブエラーが生じる。ストレージデバイスが古くなってより多くのエラーが生じている場合、対応するデバイス内冗長データ220の量が増加することがある。例えば、ストライプ250bの書き込み動作前に、ストレージデバイス176a~176kの各々の特性をモニタし、これを使用してエラー率の増加を予測することができる。ストレージデバイス176c及び176jのエラーの増加が予測されることが検出される可能性がある。これに応答して、ストレージデバイス176c及び176jのデバイス内冗長データ220の量が増加することがある。図2のストライプ250a及び250bの例では、ストライプ250a及び250bのストレージデバイス176c及び176jの記憶されている保護データの量の増加を確認することができる。例えば、この時点で、ストレージデバイス176c及び176jをシングルパリティで保護するのではなく、これらのデバイスをダブルパリティ又はトリプルパリティで保護することができる。なお、デバイス176c及び176jのデバイス内保護の量を増加させても、同じストライプ内の他のデバイスにおける量を対応して増加させる必要はない。むしろ、ストライプのデータは、各デバイスにおいて望むように異なるレベルの保護を有することができる。様々な実施形態では、所与のレベルのデータ保護の増減を選択的に行うことができる。例えば、1つの実施形態では、上記の例におけるストレージデバイス176c及び176jなどの、より多くのエラーを生成することが検出されたストレージデバイスに対してしか保護の増加を行わなくてよい。別の実施形態では、ストレージデバイス176c及び176jがより多くのエラーを生成することが検出された場合、ストレージデバイス176a~176kの各々に対して保護の増加を行うことができる。1つの実施形態では、デバイス176kなどのパリティデバイス上におけるデバイス内保護の量を増加させるために、ストライプ内で保護されているデータの量を減少させることが必要となる場合がある。例えば、所与のストライプのパリティデバイス上に記憶されたデバイス内データの量を増加させると、このデバイスが記憶するストライプ内のデータのためのパリティデータの量が必然的に減少する。このパリティデータの量が、ストライプ内のデータを全て保護するために必要な量未満に減少した場合、パリティ保護を継続することが望ましい場合にはストライプ内のデータを減少させなければならない。ストライプ内に記憶されるデータの量の減少させる代替案として、パリティデータを記憶するための異なるデバイスを選択することもできる。様々な選択肢が可能であり、企図される。また、本明細書に記載する図2及びその他の図には、176kなどの別個のパリティデバイスを示していることがあるが、様々な実施形態では、パリティを単一のデバイスに記憶するのではなく複数のデバイスに分散させることができる。従って、別個のパリティデバイスの図示は、一般に説明を簡単にするための論理的な表現と見なすことができる。ここで図3を参照すると、データストレージサブシステムにおけるデバイス内保護を調整する方法300の1つの実施形態を示している。一般に、ネットワークアーキテクチャ100及びデータストレージアレイ120a~120b内で具体化される構成要素は、方法300に従って動作することができる。この実施形態のステップを順番に示す。しかしながら、ステップによっては、図示のものとは異なる順序で行なうことができるもの、同時に行うことができるもの、他のステップと組み合わせることができるもの、及び別の実施形態には存在しないものもある。ブロック302において、ストレージデバイスにユーザデータを記憶するための第1の空き容量を決定する。このユーザデータは、データ210に関して上述したように、RAIDアーキテクチャで使用されるエンドユーザアプリケーション又はデバイス間パリティ情報内で使用されるデータとすることができる。この第1の空き容量は、上述したようなストレージデバイス内の1又はそれ以上のページを含むことができる。1つの実施形態では、ストレージコントローラ174内のグローバルRAIDエンジン178が、ストレージデバイス176a~176mの各々から挙動統計値を受け取る。グローバルRAIDエンジン178は、ストレージデバイス176a~176mの2又はそれ以上を含む所与のデバイスグループについて、RAIDデータレイアウト及びこれらの2又はそれ以上のストレージデバイスの各々に維持すべき最初のデバイス内冗長性の量を決定することができる。ブロック304において、RAIDエンジン178は、対応するデバイス内保護データをストレージデバイスに記憶するための第2の空き容量を決定することができる。この第2の空き容量は、ストレージデバイス内の1又はそれ以上のページを含むことができる。デバイス内保護データは、上述したデバイス内冗長データ220に対応することができる。ブロック306において、所与のデバイスグループに含まれる各ストレージデバイス内の第1の空き容量にデータを書き込む。1つの実施形態では、ユーザデータ及びデバイス間パリティ情報が、いずれも所与のデバイスグループに含まれる複数のストレージデバイスにわたる単一のRAIDストライプとして書き込まれる。再び図2を参照して分かるように、対応する書き込まれるデータの幅は、各ストレージデバイスにおいて同じである。ブロック308において、ECCアルゴリズム、XORベースのアルゴリズム、又はその他のあらゆる適当なアルゴリズムにより、デバイス内保護データを生成する。また、システムは、正しく取り出されなかったデータを識別しやすくするためにチェックサムを生成することができる。ブロック310において、生成されたデバイス内保護データを、ストレージデバイス内の第2の空き容量に書き込む。ブロック312において、RAIDエンジン178は、1又はそれ以上のストレージデバイスの挙動をモニタすることができる。1つの実施形態では、RAIDエンジン178が、対応するストレージデバイスのモデルを含み、このモデルに入力すべき挙動統計値をストレージデバイスから受け取ることができる。このモデルは、ストレージデバイスの既知の特性を利用することにより、ストレージデバイスの挙動を予測することができる。例えば、このモデルは、所与のストレージデバイスのエラー率の増加が近いことを予測することができる。RAIDエンジン178は、信頼性に影響を与える所与のストレージデバイスの特性を検出した条件付きブロック314場合、ブロック316において、データ及び対応するデバイス内冗長データを記憶するための第1及び第2の空き容量を調整することができる。例えば、RAIDエンジンは、少なくともデバイスの使用年数、アクセス率及びエラー率などの上述した統計値をモニタすることができる。再び図2を参照して分かるように、RAIDエンジン178は、ストレージデバイス176c及び176jのエラー数が増加したことを検出することができる。或いは、RAIDエンジンは、ストレージデバイス176c及び176jのエラー数の増加を予測することができる。従って、RAIDエンジン178は、第2のストライプ250bを書き込む前に、ストレージデバイス176a~176kの各々にデータ210及びデータ220を記憶するために使用するページ数を調整することができる。同様に、RAIDエンジン178は、ストレージデバイス176bの信頼性が低下していることを検出することができる。従って、RAIDエンジン178は、第3のストライプ250cを書き込む前に、ストレージデバイス176a~176kの各々にデータ210及びデータ220を記憶するために使用するページ数を再び調整することができる。ストレージデバイス特性のモニタリングここで図4を参照すると、ストレージサブシステムの1つの実施形態の汎用ブロック図を示している。1又はそれ以上のデバイスグループ173a~173mの1つにおいて、1又はそれ以上のストレージデバイス176a~176mの各々を分割することができる。同様に、他のデバイスを含む他のデバイスグループも存在し得る。各ストレージデバイスの対応する動作キュー及び状態テーブルを、デバイスユニット400a~400wの1つに含めることができる。これらのデバイスユニットを、RAM172に記憶することができる。デバイスグループ173a~173mの各々に関し、対応するRAIDエンジン178a~178mを含めることができる。各RAIDエンジン178は、対応するデバイスグループ内のストレージデバイスの各々の統計値を追跡するモニタ410を含むことができる。データレイアウトロジック420は、対応するストレージデバイス内の、ユーザデータ、デバイス間冗長データ及びデバイス内冗長データに対して割り当てるべき空き容量を決定することができる。ストレージコントローラ174は、ウェアレベリング、ガベージコレクション、I/Oスケジューリング、重複除外、並びに着信及び発信パケットのプロトコル変換といったタスクのうちの少なくとも1つを行うためのその他の制御ロジック430を含むことができる。ここで図5を参照すると、デバイスユニットの1つの実施形態の汎用ブロック図を示している。デバイスユニットは、デバイスキュー510及びテーブル520を含むことができる。デバイスキュー510は、読み込みキュー512、書き込みキュー514、及びその他の動作キュー516などの1又はそれ以上の他のキューを含むことができる。各キューは、1又はそれ以上の対応する要求530a~530dを記憶するための複数のエントリを含むことができる。例えば、対応するSSDのデバイスユニットは、少なくとも読み込み要求、書き込み要求、トリム要求及び消去要求などを記憶するためのキューを含むことができる。テーブル520は、状態データ又は統計値530を記憶するための複数のエントリを各々が含む1又はそれ以上の状態テーブル522a~522bを含むことができる。また、この図及びその他の図には、キュー及びテーブルが特定数のエントリを含むように示しているが、必ずしもエントリ自体が互いに対応するわけではない。さらに、キュー、テーブル及びエントリの数は、図示のものとは異なることがあり、また互いに異なることもある。ここで図6を参照すると、所与のデバイスに対応する状態テーブルの1つの実施形態を示す汎用ブロック図を示している。1つの実施形態では、このようなテーブルが、SSDなどの所与のストレージデバイスの状態情報、エラー情報及び摩耗率情報に対応するデータを含むことができる。この情報に、対応するRAIDエンジンがアクセスすることにより、このRAIDエンジンは、デバイス間保護及びデバイス内保護の両方に使用するデータ記憶及びスキームのために割り当てられた空間を動的に変更できるようになる。1つの実施形態では、この情報が、デバイスの使用年数602、エラー率604、デバイス606上で検出された総エラー数、回復可能なエラー数608、回復不能なエラー数610、デバイスのアクセス率612、記憶されたデータの使用年数614、及び割り当て空間616a~616nの1又はそれ以上の割り当て状態、のうちの少なくとも1つ又はそれ以上を含むことができる。これらの割り当て状態は、使用中、空き、及びエラーなどを含むことができる。フレキシブルなRAIDレイアウトここで図7を参照すると、フレキシブルなRAIDデータレイアウトアーキテクチャの1つの実施形態を示す汎用ブロック図を示している。RAIDエンジンは、ストレージデバイス176a~176kに使用すべき保護レベルを決定することができる。例えば、RAIDエンジンは、ストレージデバイス176a~176kにRAIDダブルパリティを利用すると決定することができる。デバイス間冗長データ240は、対応するユーザデータから生成されたRAIDダブルパリティ値を表すことができる。1つの実施形態では、ストレージデバイス176j及び176kが、ダブルパリティ情報を記憶することができる。他のレベルのRAIDパリティ保護も可能であり、企図されると理解されたい。また、他の実施形態では、ダブルパリティ情報を、各RAIDストライプのストレージデバイス176j及び176kに記憶するのではなく、この記憶をストレージデバイス間で循環させることもできる。ダブルパリティ情報がストレージデバイス176j及び176kに記憶されるように示しているのは、図示及び説明を簡単にするためである。ここで図8を参照すると、フレキシブルなRAIDデータレイアウトアーキテクチャの別の1つの実施形態を示す汎用ブロック図を示している。図7に示す例と同様に、ストレージデバイス176a~176kにはダブルパリティを使用することができる。この例では、RAIDダブルパリティについて説明するが、RAIDデータレイアウトアーキテクチャではあらゆる量の冗長性を選択することができる。動作中、RAIDエンジン178は、ストレージデバイス176a~176kの特性をモニタして、デバイスが最初の又はその他の所与の信頼性レベルよりも高い信頼性レベルを示していると判断することができる。これに応答して、RAIDエンジン178は、RAID保護をRAIDダブルパリティからRAIDシングルパリティに変更することができる。他のRAIDデータレイアウトアーキテクチャでは、サポートされている冗長性の量を別様に減少させることができる。他の実施形態では、ストレージデバイス176a~176kのモニタ及び保護レベルの変更を、ストレージコントローラ174内の他のロジックによって行うことができる。引き続き上記の例を参照すると、所与のRAIDストライプ上で実行される後続の書き込み動作に関しては、シングルパリティ情報のみを生成して記憶することができる。例えば、サポートされている冗長性の量を変更した後の書き込み動作に関しては、後続のRAIDストライプ内でストレージデバイス176kを使用しなくてもよい。また、ストレージデバイス176kに記憶されたデータを無効にし、これによりストレージを解放することもできる。その後、ストレージデバイス176kの解放されたデータに対応するページを、他の用途に再割り当てすることができる。このパリティ保護の量を低減し、パリティ保護データを記憶するために以前に使用されていた空間を解放するプロセスのことを、パリティシュレッディングと呼ぶことができる。さらに、ストレージデバイス176kがSSDである実施形態では、ストライプ250a内のページを書き換える前に、ストレージデバイス176k内で1又はそれ以上の消去動作を行うことができる。上記のパリティシュレッディングの例を引き続き参照すると、パリティシュレッディング後にストライプ250a内のストレージデバイス176kの再割り当てされたページに記憶されたデータは、ストライプ250aに対応しない他のRAIDストライプのユーザデータ又は対応するRAIDシングルパリティ情報を保持することができる。例えば、ストライプ250a内のストレージデバイス176a~176jに記憶されたデータは、パリティシュレッディング前に実行される1又はそれ以上の書き込み動作に対応することができる。ストライプ250a内のストレージデバイス176kに記憶されたデータは、パリティシュレッディング後に実行される1又はそれ以上の書き込み動作に対応することができる。同様に、ストライプ250b内のストレージデバイス176a~176jに記憶されたデータは、パリティシュレッディング前に実行される1又はそれ以上の書き込み動作に対応することができる。ストライプ250b内のストレージデバイス176kのページは、解放後に消去して、サポートされている冗長性の量を変更した後に実行される1又はそれ以上の書き込み動作に対応するデータに書き換えることができる。なお、冗長性情報が複数のストレージデバイスを循環する場合、このスキームはより一層効果的となり得る。このような実施形態では、シュレッディングにより解放される空間も、同様にストレージデバイスにわたって分散される。再び図8を参照すると、ストライプ250c内のストレージデバイス176kに示す割り当て解除されたページは、パリティシュレッディング前にRAIDダブルパリティ情報を記憶していた可能性のある記憶位置を表す。しかしながら、現時点でこれらのページは無効であり、未だ再割り当てされていない。上記の例では、ストレージデバイス176k内のページを解放して再割り当てする方法及びタイミングが、SSDの特定の特性によって決まる。これらの特性の例として、1又はそれ以上のページを再プログラムする書き換える前に少なくとも消去ブロック全体を消去することが挙げられる。図8からわかるように、パリティをシュレッドする際に、デバイス全体をシュレッドする必要はない。むしろ、個々のストライプに関して、望むようにパリティをシュレッドすることができる。同様に、ストライプのパリティ保護を増加させることもでき、別のデバイス上に記憶された保護データをストライプに追加することもできる。ここで図9を参照すると、RAIDレイアウトを動的に決定する方法の1つの実施形態を示している。一般に、ネットワークアーキテクチャ100及びデータストレージアレイ120a~120b内で具体化される構成要素は、方法900に従って動作することができる。図9には、2つのプロセス910及び920を示している。これらのプロセスの各々は、同時に又は所与の順序で動作することができる。さらに、この実施形態のステップを順番に示す。しかしながら、ステップによっては、図示のものとは異なる順序で行なうことができるもの、同時に行うことができるもの、他のステップと組み合わせることができるもの、及び別の実施形態には存在しないものもある。ブロック910は、ストレージ制御システムが、システム内のストレージデバイスの特性及び挙動をモニタするプロセスを示すブロック912。例えば、図6で説明したような特性を観察及び/又は記録することができる。信頼性の変化などの特定の状態が検出された場合判定ブロック914、記憶したデータに使用する保護の量を変更することができるブロック916。例えば、所与のデバイスの使用年数が比較的短い場合には、デバイスの信頼性が分からないことがある例えば、デバイスが初期故障を起こして比較的早い時期に機能しなくなることもある。従って、RAIDストライプ毎に1又はそれ以上の追加のストレージデバイスを使用して、パリティ情報を記憶することができる。その後の時点で、時間とともにこれらのデバイスが信頼できると判明した時に、この追加の保護を除去することができる。様々な実施形態では、デバイスのエラー率に関する特性を維持することができる。例えば、訂正可能な及び/又は訂正不能なエラーに関する特性を維持し、これらを使用して所与のデバイスの信頼性に関する判断を行うことができる。ストレージコントローラは、この情報に基づいて、デバイス又はストライプの様々な保護レベルを動的に変更することができる。図9のブロック920は、ストレージのストライプ又はその他の部分を割り当てる時点で判定ブロック922、データに使用すべきレイアウト及び保護レベルに関する決定を行なうブロック924ことができるプロセスを大まかに示すものである。なお、この時にブロック910のプロセスを実施することもできる。或いは、既にプロセス910によって保護レベルが決定され記憶されている場合もある。この場合、ブロック924の決定は、この記憶されているデータに基づくことができる。1つの実施形態では、所与のレイアウトを決定すると、このレイアウトに使用すべき特定のデバイスをデバイスグループから選択することができるブロック925。例えば、1つの実施形態では、20個のデバイスからなるグループを使用することができる。52のレイアウトを決定した場合、この20個のデバイスからなるグループから任意の7つのデバイスを使用するように選択することができる。また、選択した52のレイアウトによるその後の書き込みにおいて、この同じ7つのデバイスを使用する必要はない。ストライプのレイアウト、保護レベル及びデバイスを決定した後、このストライプに書き込みを行うことができるブロック926。様々な実施形態では、RUSHアルゴリズムを利用して、所与のストライプのデータ及び冗長性情報がいずれのデバイス上に存在するようになるかを判断することができる。例えば、RUSHアルゴリズムを使用して、ストレージデバイス176a~176kの所与のストライプの82のRAIDレイアウトに利用すべき特定のデバイスを選択することができる。一般的に言えば、本明細書では、一般にMNのレイアウトは、所与のデータストライプのM個のデータデバイス及びN個のパリティデバイスを含むレイアウトを表すことができる。また、上述したように、パリティを完全に特定のデバイス内に配置するのではなく、デバイスにわたって分散させることもできる。従って、82のレイアウトは、10個のデバイスにわたってストライピングされたデータ及びパリティを含むことができ、これらのデバイスのうちの8つがデータを記憶し、2つがパリティを記憶する。その後のある時点で、122のレイアウトを選択することができる。このように、書き込みを行う例えば、ストライプを書き込む時点で、所望のレイアウト及び保護特性を動的に決定することができる。1つの実施形態では、ストレージデバイス176a~176kが、30個、50個、又はそれ以上のストレージデバイスなどの、10個よりも多くのストレージデバイスを含むことができる。しかしながら、82のレイアウトによるストライプでは、ストレージデバイスのうちの10個しか利用されない。なお、デバイスのうちの任意の10個を選択し、ストライプを記憶する際に使用するこれらの10個のデバイスを選択するために、任意の好適なアルゴリズムを使用することができる。例えば、CRUSHアルゴリズムを使用して、所与の82のRAIDレイアウトのために、ストレージデバイス176a~176kのうちのいずれの10個を利用すべきかを選択することができる。ストレージデバイス176a~176kのために選択される82のRAIDレイアウトの1つの例では、これらのストレージデバイスのうちの2つを使用して、パリティ情報などのエラー訂正符号ECC情報を記憶することができる。この情報を使用して、再構成読み込み要求を行うことができる。再び図8を参照すると、この例では、RAIDダブルパリティ情報を記憶するためにストレージデバイス176j及び176kを選択することができる。この場合も、パリティ情報を常に同じストレージデバイスに記憶するのではなく、RAIDアレイに含まれるストレージデバイス176a~176kの各々の間で循環式に記憶することができる。図示及び説明を簡単にするために、ストレージデバイス176j及び176kがRAIDダブルパリティを記憶しているものとして説明する。ブロック926において、書き込み動作の実行中に、RAIDアレイに含まれる複数のストレージデバイスにわたり、メタデータ、ユーザデータ、デバイス内パリティ情報及びデバイス間パリティ情報をRAIDストライプとして書き込むことができる。ブロック912において、RAIDエンジン178は、RAIDアレイ内の1又はそれ以上のストレージデバイスの挙動をモニタすることができる。1つの実施形態では、RAIDエンジン178が、図4に示すようなモニタ410及びデータレイアウトロジック420を含むことができる。RAIDエンジン178は、少なくとも所与のストレージデバイスの使用年数、エラー数及びエラータイプ、最後のデータ割り当て以降に検出された構成変更、所与のデータの使用年数、及びRAIDアレイ内の記憶空間の現在の使用状況などをモニタすることができる。RAIDエンジン178によりモニタされたデータは、図4に示すデバイスユニット400a~400wの1つなどのRAM172に記憶することができる。このデータを記憶するために、図5及び図6に示す例のようなテーブルを使用することができる。対応するRAIDエンジンに含まれるロジックは、ストレージデバイスの最新の統計値をモニタすることにより、ストレージデバイスの挙動を検出して予測することができる。例えば、このモデルは、所与のストレージデバイスのエラー率の増加が近いことを予測することができる。単複のストレージデバイスの信頼性が増したことが検出された条件付きブロック908場合、ブロック910において、RAIDエンジンは、システム内のデータ保護レベルを低下させることができる。例えば、1つの実施形態では、ストレージサブシステムに記憶されているパリティ情報の量を減少させることができる。上記の例に関して、RAIDエンジンは、対応する82のRAIDアレイのRAIDダブルパリティをRAIDシングルパリティに低下させて、81のRAIDアレイに変換することができる。他の例では、所与のRAIDアレイが、ブロック916の前に、RAIDアーキテクチャにおいてNレベルの量の冗長性又はパリティを利用していることがある。ブロック916において、RAIDエンジンは、N>1かつ1<m<NとするN-mレベルの量の冗長性を利用すると決定することができる。従って、その後の所与のRAIDストライプの書き込み動作中には、所与のRAIDストライプ内で、より少ないm個のストレージデバイスに書き込みが行われるようになる。RAIDエンジン又は別の構成要素は、システム内のデータ保護レベルを低下させるために、上述したようなパリティシュレッディングを行うことができる。その後、ストレージコントローラ174は、シュレッディング動作の結果として解放されたページを、その後の書き込み動作で使用されるように再割り当てすることができる。上述したように、ストレージデバイス176a~176kの各々が古くなってデータで満たされると、RAIDアレイから追加のパリティ情報を除去することができる。メタデータ、ユーザデータ、対応するデバイス内冗長性情報、及びデバイス間冗長性情報の一部は残存する。82のRAIDアレイを使用した上記の例に関しては、ストレージデバイス176a~176jに記憶された情報が残存する。一方、追加のデバイス間冗長性情報又は追加のパリティ情報は、RAIDアレイから除去することができる。例えば、ストレージデバイス176kに記憶された追加のパリティ情報を、RAIDストライプから除去することができる。上記の例でストレージデバイス176a~176jに記憶された情報などの残存した情報は、適所に残存することができる。上記の例におけるストレージデバイス176k内の対応するページなどの、追加のパリティ情報を記憶する記憶空間は、その後の書き込み動作のために再利用して再割り当てすることができる。1つの実施形態では、個々の新たな割り当てにより、新たな仮想アドレスが受け取られる。個々の新たな割り当ては、所与のサイズ、所与の配置又は構成を有することができ、所与の仮想又は物理記憶空間に適応することができる。1つの実施形態では、ストレージデバイス176a~176kの各々及びストレージデバイス内の各割り当てページが、識別情報を含むヘッダを有する。このような識別情報により、所与の構成を変更することなく、解放された追加のパリティ情報のために記憶空間を再利用できるようになる。ストレージデバイス176a~176kの1又はそれ以上がSSDである実施形態では、消去ブロック内の1又はそれ以上のページを再プログラムする前に消去ブロックが消去される。従って、ストレージデバイス176kがSSDである実施形態では、ストレージデバイス176k内の解放されたページを再プログラムする前に、対応する消去ブロックが消去される。元々の82のRAIDアレイを使用する上記の例に関しては、ページにデータ210を再プログラムする前に、ストライプ250a~250b内のストレージデバイス176kの1又はそれ以上の消去ブロックが消去される。この時、元々の82のRAIDアレイは81のRAIDアレイになっており、ストレージデバイス176jは、パリティシュレッディング前に書き込まれたRAIDストライプにシングルパリティ情報を提供する。当業者には周知のように、所与のストレージデバイスの読み込み又は書き込みエラー中には、対応するRAIDストライプ内のサポートされているデバイス間パリティ情報からデータを再構成することができる。この再構成されたデータをストレージデバイスに書き込むことができる。しかしながら、この再構成されたデータがストレージデバイスに対して書き込みエラーとなった場合、このストレージデバイス上に記憶されている全てのデータを、対応するパリティ情報から再生することができる。この再生されたデータは、別の場所に再配置ことができる。フラッシュメモリでは、フラッシュ変換層FTLが、データの記憶位置をリマップする。また、フラッシュメモリでは、データの再配置が、消去ブロック内の対応するページを再プログラムする前に消去ブロック全体を消去することを含む。マッピングテーブルを消去ブロック対ページの粒度に維持することにより、リマッピングテーブルをよりコンパクトにすることができる。さらに、再配置中には、パリティシュレッディング中に解放された追加のページを使用することができる。オフセットパリティここで図10を参照すると、フレキシブルなRAIDデータレイアウトアーキテクチャのさらに別の実施形態を示す汎用ブロック図を示している。図8に示す汎用ブロック図と同様に、フレキシブルなRAIDデータレイアウトアーキテクチャを使用することができる。ストレージデバイス176a~176kは、複数のストレージデバイスにわたってレイアウトされた複数のRAIDストライプを含む。ストレージデバイス176a~176kの各々は複数のページを含むが、図を簡単にするために、ページ1010及びページ1020にしかラベルを付けていない。図示の例では、ストレージデバイス176j及び176kがダブルパリティ情報を記憶するダブルパリティRAIDデータレイアウトが選択されている。ストレージデバイス176a~176kのページの各々は、特定のタイプのデータを記憶する。一部のページは、ユーザデータ210及び対応する生成されたデバイス間パリティ情報240を記憶する。他のページは、対応する生成されたデバイス内パリティ情報220を記憶する。さらに他のページは、メタデータ242を記憶する。メタデータ242は、ページヘッダ情報、RAIDストライプ識別情報、及び1又はそれ以上のRAIDストライプのログデータなどを含むことができる。ストレージデバイス176a~176kのページの各々は、デバイス間パリティ保護及びデバイス内パリティ保護に加え、各所与のページに記憶されたチェックサムなどの追加の保護を含むこともできる。様々な実施形態では、各ストライプの最初の単一のメタデータページを、他のストライプヘッダから再生することができる。或いは、データをデバイス間パリティによって保護できるように、このページがパリティシャード内の異なるオフセットに存在することもできる。シャードは、デバイスの一部を表す。従って、パリティシャードは、パリティデータを記憶するデバイスの一部を意味する。物理層様々な実施形態では、本明細書で説明するシステムが物理層を含み、これを通じてシステムの他の要素がストレージデバイスと通信することができる。例えば、スケジューリングロジック、RAIDロジック及びその他のロジックは、ソフトウェア及び/又はハードウェアのあらゆる好適な組み合わせを含む物理層を介してストレージデバイスと通信することができる。一般に、物理層は、永続ストレージへのアクセスの提供及びデータストレージの完全性に関する機能の実行を含む様々な機能を実行する。図11Aに、500GBのデバイスの仮想デバイスレイアウトの1つの実施形態を示す。様々な実施形態では、本明細書で説明するストレージデバイスの最初にパーティションテーブル1101をフォーマットし、デバイスの最後にパーティションテーブルのコピーをフォーマットすることができる。また、最初と最後のブロックにデバイスヘッダ1103を記憶することができる。例えば、フラッシュベースのストレージデバイスでは、最初と最後の消去ブロックにデバイスヘッダを記憶することができる。上述したように、消去ブロックは、典型的には256KB~1MBのフラッシュ構造である。第1の消去ブロック内には、追加の未使用空間を確保することができるパディング1105。各デバイスには、ログ及び診断情報1107を書き込むための第2の消去ブロックを確保することができる。これらの間の残りの消去ブロックは、複数の消去ブロックのアロケーションユニットAU1109に分割される。AUサイズは、デバイス毎に十分な数のAUが存在して良好な割り当て粒度が得られるように選択することができる。1つの実施形態では、オーバーヘッドを避けるのに十分な多さではあるが、追跡しやすいように多すぎない単位での割り当てを可能にするように、デバイス上に10,000個ほどの範囲内のAUが存在する。AU割り当て済み/空き/消去済み/不良の状態の追跡は、AU状態テーブルに維持することができる。AUの摩耗率は、摩耗レベルテーブルに維持することができ、総エラー数は、AUエラーテーブルに維持することができる。様々な実施形態では、物理層が、異なるノード上に存在し得るデバイスの組にわたる各デバイス内の1つのセグメントシャードを含むセグメント内で空間を割り当てる。図11Bに、セグメント及びそのセグメントの様々な識別可能部分の1つの実施形態を、1つの考えられるセグメントレイアウトで示す。セグメントに記憶されたデータのタイプを示す凡例も含む。図示の実施形態では、複数のデバイスに記憶された単一のセグメントを示している。データデバイス:データ0~データN、並びにパリティデバイス:パリティP及びパリティQを示す。1つの実施形態では、各セグメントシャードが、各デバイス上でシャードのサイズが等しくなるように、デバイスに1又はそれ以上のアロケーションユニットを含む。セグメントシャードを示すために、セグメントシャード1123を挙げている。図11Bには、I/O読み込みサイズ1127も示しており、これは1つの実施形態ではページに対応する。I/Oシャードのページパリティの1又はそれ以上のページを含むことができるI/Oパリティチャンク1129も示している。1つの実施形態では、各セグメントが、以下のパラメータのうちの1又はそれ以上を含むことができる独自の構成を有する。1RAIDレベル-セグメント内のデバイス間保護に使用されるRAIDレベル。これにより、ミラーリング、パリティ、又はECCRAID、及びどれだけのセグメントシャードがパリティを含むかを決定することができる。2デバイスレイアウトI/Oシャードサイズ-書き込み中に各デバイスにわたるストライピングに使用するサイズを表す。このサイズは、典型的には256KB~1MBとなり、恐らくは各デバイス上の消去ブロックサイズの倍数となる。図11Bには、例示目的でI/Oシャードサイズ1125を挙げている。3I/O読み込みサイズ-論理的読み込みサイズである。各I/Oシャードを一連の論理ページとしてフォーマットすることができる。さらに各ページは、ページ内のデータのヘッダ及びチェックサムを含むことができる。読み込みが発行された場合、この読み込みは、1又はそれ以上の論理ページに対するものとなり、チェックサムを使用して各ページ内のデータを検証することができる。4I/OシャードRAIDレベル-I/Oシャードは、再生中に見つかった潜在的なエラーを処理すべきシャード内パリティを有する。このパラメータは、どのタイプのパリティがシャード内保護に使用されているか、従ってどれだけのシャード内パリティのコピーが維持されるかを決定する。5I/Oパリティチャンク-様々な実施形態では、ストレージデバイスが、ページ単位でECCを行うことができる。従って、エラーが見つかった場合、物理ページ全体の不具合を示している可能性がある。I/Oパリティチャンクは、セグメント内の各デバイス上の物理ページサイズの最小公倍数であり、I/Oパリティチャンク又はI/O読み込みサイズのうちの大きい方にI/Oシャードをストライピングすることにより、シャード内パリティが計算される。ページパリティの1又はそれ以上のページを含めることができる。様々な実施形態では、チェックサム検証が失敗に終わった場合、このパリティを使用してデータを再生することができる。様々な実施形態では、個々の新たなセグメントに書き込みが行われる際に、そのセグメントのRAID構成が選択される。RAID構成の選択は、現在のアクティブなノード及びデバイスの組、並びにセグメント内のデータのタイプなどの因子に基づくことができる。例えば、10個のノード又はデバイスが利用可能な場合、82のRAID6の構成を選択し、2つのデバイス又はノード故障に耐えるように、これらのノードにわたってセグメントをストライピングすることができる。その後、ノードが故障した場合、次のセグメントを72のRAID6の構成に切り替えることができる。セグメント内では、セグメントシャードの一部がデータを含み、一部がパリティなどのECCを含む。1つの実施形態では、5種類のセグメントが存在する。これらのセグメントのうちの3つは、AU状態テーブル、AUエラーテーブル及び摩耗率テーブルに対応する。いくつかの実施形態では、これらの3つのセグメントをミラーリングしてさらに保護することができる。これらの3つのセグメントに加え、ミラーリングを通じてさらに保護することもできるメタデータセグメントが存在する。最後に、クライアントブロック及びログ情報を保持するデータセグメントが存在する。ログ情報は、セグメント内のクライアントブロックに関連する最新情報を含む。データセグメントは、パリティP及びパリティQシャードを使用して、図11Bに示すようなRAID6によって保護される可能性が高い。上記に加え、起動時に全てのセグメントシャードのヘッダからの情報を投入されるメモリ内データ構造としてセグメントテーブルが維持される。いくつかの実施形態では、このテーブルを全てのノード上で完全にキャッシュして、あらゆるノードがストレージアクセスを物理アドレスに変換できるようにすることができる。しかしながら、他の実施形態では、論理基準を取ってデータが記憶されているセグメントレイアウトノードを識別できるセグメントテーブルを各ノードが有することができるオブジェクトストレージモデルを使用することができる。その後、ノード上の正確な記憶位置を識別するための要求がノードに伝えられる。図11Bには、セグメント内のかなりの量の空間を占めるあらゆるボリューム、スナップショットの組み合わせを識別するセグメントテールデータも示す。スナップショットを除去する場合、データスクラバが、このデータに基づいて、ガベージコレクションを行うセグメントの識別を支援することができる。1つの実施形態では、基本書き込み単位が、セグメント内のデバイスの各々における1つのI/Oシャードであるsegioである。segio内の各論理ページには、ページのチェックサムメディアチェックサムと呼ぶことができるを含むページヘッダが、データの実際のページサイズが1ページをわずかに下回るようにフォーマットされる。セグメントのパリティシャード内のページについては、データページ内のページチェックサムがパリティページによって保護されるように、ページヘッダが小さくなっている。各I/Oシャードの最終ページは、この場合も小さなヘッダを有して、消去ブロック内の全てのチェックサム及びページデータをページ不具合から保護するパリティページである。ここで言うページサイズとは、1又はそれ以上の物理フラッシュページとすることができるI/O読み込みサイズのことである。セグメントによっては、物理ページよりも小さな読み込みサイズを使用することができる。この方法は、検索情報に対する読み込みをインデックスで駆動することができ、より小さなデータ部分を読み込みながら所望のデータを取得できるメタデータに対して行うことができる。このような場合、物理ページの半分を読み込むということは、より少ないデータをI/Oバス及びネットワークに結び付けて、より少ないデータを検証する例えば、チェックサムを行うことを意味する。ある実施形態は、物理ページよりも小さい読み込みサイズをサポートするために、消去ブロックの最後に複数のパリティページを含んで、全てのパリティページの全体的サイズがフラッシュページサイズに等しくなるようにすることができる。消去ブロックの摩耗率が増すにつれ、エラーの可能性は高くなる。摩耗率を追跡することに加え、高いエラー確率が識別される1又は複数の消去ブロック上に、エラーが観察される頻度に関するデータを維持することもできる。消去ブロックによっては、単一のRAID5パリティの代わりに、消去ブロックの最後にダブル又トリプルエラー訂正パリティを保持することを決定できるものもある。この場合、これに応じてsegioのデータペイロードを低減することができる。全ての消去ブロックではなく、segio内の不良な消去ブロックのみを低減することが必要となり得る。消去ブロック内のページヘッダを使用して、いずれのページがパリティであり、いずれのページがデータであるかを識別することができる。ストレージからページが読み込まれる時には常に、ページチェックサムを使用してコンテンツを検証することができる。この検証がうまくいかなかった場合、デバイス内パリティを使用してデータの再生を試みることができる。これがうまくいかなかった場合、セグメントのデバイス間ECCを使用してデータを再構成することができる。データセグメントでは、ペイロード領域を2つの領域に分割することができる。記憶されたクライアントブロックに関する最新情報を含むことができるログデータとしてフォーマットされたページが存在するようになる。ペイロード領域の残りは、クライアントブロックとしてフォーマットされたページを含むことができる。このクライアントブロックデータは、圧縮された形で記憶することができる。数多くの圧縮アルゴリズムが可能であり、企図される。また、様々な実施形態では、Intel登録商標高度暗号化標準命令を使用してチェックサムを生成することができる。また、データと同じページ内に存在して、データの圧縮に使用するアルゴリズムの識別などの、クライアントブロックを読み込むために必要な情報を含むクライアントブロックのヘッダも存在することができる。ガベージコレクションは、segio内のクライアントブロックヘッダ及びログエントリの両方を利用することができる。また、クライアントブロックは、重複除外、及び解凍データの正しさをチェックするために使用される未圧縮データのチェックサムとすることができるデータハッシュを有することができる。いくつかの実施形態では、セグメント及びsegioが、これらを順序付けるために使用される単調増加するID番号を有することができる。segioへの書き込みの一部として、論理層が、以前のフラッシュに対する依存を記録することができる。起動時には、物理層が、セグメント及びsegiosの順序付きリストを構築することができ、segioが別の未完成のsegioに依存している場合、これをロールバックして書き込まれていないと見なすことができる。摩耗率テーブル各デバイスのローカルなセグメントには、各デバイスの摩耗率テーブルWLTを記憶することができる。この情報を、各セグメントシャードのヘッダに記憶することもできる。1つの実施形態では、摩耗情報が、アロケーションユニットが消去及び再利用された回数を表す整数である。摩耗情報は正確でない場合もあるので、一定量の行動が行われた場合、又は相当期間にわたってシステムがアイドルであった場合に、デバイスに対するテーブルのフラッシュを行なうことができる。WLTは、新たなWLTセグメントを割り当てる際に古いWLTセグメントをクリーニングすることに関与することもできる。追加の保護層を加えるために、古いコピーを解放する前にこれらを維持することができる。例えば、テーブルマネージャが、WLTエントリの以前の消去ブロック及び現在の消去ブロックを常に保持し、新たなセグメントを割り当てる場合には、この新たなセグメントの第2の消去ブロックに書き込みを行うまで古いセグメントを解放しないように保証する。AU状態テーブルAU状態テーブルASTは、各AUの状態を追跡する。この状態には、空き、割り当て済み、消去済み、及び不良がある。このASTを、デバイス上のセグメントに記憶することができる。割り当て済み又は空きへの状態変更は同期更新とすることができ、不良又は消去済みへの状態変更は非同期更新とすることができる。一般に、このテーブルは十分に小さく、NVRAMに記録できるだけの十分な更新を有することができる。ASTは、新たなセグメントを割り当てる際に古いWLTセグメントをクリーニングすることに関与することができる。ASTは、ドライブ上の各AUの第1のブロックをスキャンすることによって完全に回復できるので、古いASTのコピーを保持する必要はない。AUエラーテーブルAUエラーテーブルAETを使用して、各AU内の回復可能エラー及び回復不能エラーの数を追跡することができる。AETは、デバイス上のセグメントに記憶され、各フィールドは、2バイトの整数とすることができる。このテーブル全体は、AU当たり4バイトの比較的小さなものとすることができる。ここで図11Cを参照すると、異なるページタイプ内のデータストレージ構成の1つの実施形態を示す汎用ブロック図を示している。図示の実施形態では3つのページタイプを示しているが、他のタイプも可能であり、企図される。図示のページタイプは、メタデータ1150を含むページ1110、ユーザデータ1160を含むページ1120、及びパリティ情報1170デバイス間又はデバイス内を含むページ1130を含む。ページ1110~1130の各々は、ヘッダ及び識別情報を含むことができるメタデータ1140を含む。また、1110~1130ページの各々は、対応するチェックサム又はその他のエラー検出及び/又は訂正符号などのページ内エラー回復データ1142を含むことができる。このチェックサム値により、所与のデバイスグループ内のストレージデバイス176a~176kに記憶されたデータをさらに保護することができる。さらに、ページ1130は、ページ間エラー回復データ1144を含むことができる。このデータ1144は、他のストレージデバイスに記憶されたページ内データ1142から導出されたECC情報とすることができる。例えば、再び図10を参照すると、デバイス間パリティ情報240を記憶するストレージデバイス176j内の各ページが、ページ間エラー回復データ1144を記憶することもできる。データ1144は、パリティ、チェックサム、又はストレージデバイス176a~176iの1又はそれ以上に記憶されたページ内エラー回復データ1142から生成されたその他の値とすることもできる。1つの実施形態では、データ1144が、他のストレージデバイスに記憶された1又はそれ以上の他のチェックサム値1142から生成されたチェックサム値である。ストレージデバイス176jの所与のページ内のデータ1144を、ストレージデバイス176a~176iの1又はそれ以上の対応するページ内のデータ1142と位置合わせするために、対応するページにパディング1146を追加することができる。1つの実施形態では、エンドユーザアプリケーションが、HDDでは512バイトのセクタの境界上でI/O動作を実行する。追加の保護を加えるために、8バイトのチェックサムを加えて520バイトのセクタを形成することができる。様々な実施形態では、フラッシュメモリベースのシステム内で圧縮及びリマッピングを行って、セクタ境界ではなくバイト境界上にユーザデータを配置可能にすることができる。また、ヘッダの後であってユーザデータの前のページ内にチェックサム8バイト又は4バイトなどを配置して、これを圧縮することができる。ページ1110~1130の各々には、この配置を示している。エンドユーザアプリケーションが512バイトのセクタを読み込む場合、1つの実施形態では2KB~8KBのサイズの対応するページが、ページの最初に8バイトのチェックサムによる追加の保護を有する。様々な実施形態では、2セクタサイズの非電力のためにこのページをフォーマットしなくてもよい。ページ1110~1120に示すように、チェックサムをページ内に2、3バイトオフセットさせることができる。このオフセットにより、ページ1130などのパリティページが、パリティページをカバーするチェックサム、及び他のページのチェックサムを保護するためのECCを記憶できるようになる。さらに別の保護レベルでは、チェックサム値を計算する際にデータ位置情報を含めることができる。ページ1110~1130の各々におけるデータ1142は、この情報を含むことができる。この情報は、論理アドレス及び物理アドレスの両方を含むことができる。この情報には、セクタ番号、データチャンク及びオフセット番号、トラック番号、平面番号などを含めることもできる。代替の構成ここで図12を参照すると、ハイブリッドRAIDデータレイアウト1200の1つの実施形態を示す汎用ブロック図を示している。3つの区分を示しているが、あらゆる数の区分を選択することができる。各区分は、図1に示すデバイスグループ713a~173bなどの別個のデバイスグループに対応することができる。各区分は、複数のストレージデバイスを含む。1つの実施形態では、CRUSHアルゴリズムなどのアルゴリズムを利用して、データストレージに使用すべきRAIDデータレイアウトアーキテクチャにおいていずれのデバイスを使用すべきかを選択することができる。図示の例には、L1のRAIDアレイ、M1のRAIDアレイ及びN1のRAIDアレイを示している。様々な実施形態では、L、M及びNが全て異なってもよく、同じであってもよく、又はこれらの組み合わせであってもよい。例えば、区分1にRAIDアレイ1210を示している。他のストレージデバイス1212は、区分1内の他のRAIDアレイの候補である。同様に、RAIDアレイ1220は、区分2内の所与のRAIDアレイを示す。他のストレージデバイス1222は、区分2内の他のRAIDアレイの候補である。RAIDアレイ1230は、区分3内の所与のRAIDアレイを示す。他のストレージデバイス1232は、区分3内の他のRAIDアレイの候補である。RAIDアレイ1210、1220及び1230の各々では、ストレージデバイスP1が、それぞれのRAIDアレイ内のRAIDシングルパリティ保護を行う。ストレージデバイスD1~DNは、それぞれのRAIDアレイ内のユーザデータを記憶する。この場合も、ストレージデバイスD1~DNとP1の間で、ユーザデータ及びRAIDシングルパリティ情報の記憶を循環させることができる。しかしながら、デバイスD1~DNにユーザデータが記憶されたものとして説明する。同様に、図示及び説明を容易にするために、デバイスP1にRAIDシングルパリティ情報が記憶されたものとして説明する。1又はそれ以上の所与のRAIDアレイに対してさらなる量の冗長性をサポートするために、3つの区分の各々のうちの1又はそれ以上のストレージデバイスを選択することができる。例えば、区分3内のストレージデバイスQ1を、RAIDアレイ1210、1220及び1230の各々と組み合わせることができる。ストレージデバイスQ1は、RAIDアレイ1210、1220及び1230の各々にRAIDダブルパリティ情報を提供することができる。この追加のパリティ情報は、アレイ1210、1220又は1230の1つにストライプが書き込まれた時に生成され記憶される。さらに、この追加のパリティ情報は、アレイ1210、1220及び1230の各々のストライプをカバーすることができる。従って、総ストレージデバイス数に対するRAIDパリティ情報を記憶するストレージデバイスの数の比率が小さくなる。例えば、区分の各々がN2のRAIDアレイを使用する場合、総ストレージデバイス数に対するRAIDパリティ情報を記憶するストレージデバイスの数の比率は、32/3N2、すなわち2/N2である。対照的に、ハイブリッドRAIDレイアウト1200の比率は、31/3N1、すなわち4/3N1である。ユーザデータの記憶に使用するストレージデバイスの数を増やすことにより、上記の比率を低減することが可能である。例えば、ストレージデバイスQ1を利用するのではなく、区分の各々が3N2のRAIDアレイを利用するようにすることができる。このような場合、総ストレージデバイス数に対するRAIDパリティ情報を記憶するストレージデバイスの数の比率は、2/3N2である。しかしながら、再構成読み込み動作中には、単一のデバイス故障のための再構成読み込み要求を3N1個のストレージデバイスが受け取る。対照的に、ハイブリッドRAIDレイアウト1200では、単一のデバイス故障のための再構成読み込み要求をN個のストレージデバイスしか受け取らない。なお、3つの区分の各々は、異なるRAIDデータレイアウトアーキテクチャを利用することができる。所与のRAIDデータレイアウトアーキテクチャの選択は、総ストレージデバイス数に対するRAIDパリティ情報を記憶するストレージデバイスの数の所与の比率に基づくことができる。また、この選択は、再構成中に再構成読み込み要求を受け取ることができる所与のストレージデバイス数に基づくこともできる。例えば、RAIDアレイ1210、1220及び1230は、La、Mb及びNcなどの構成をそれぞれ含むことができる。区分内のRAIDアレイの1又はそれ以上に対してさらなる量の冗長性をサポートするために、上記の条件に基づいてストレージデバイスQ1などの1又はそれ以上のストレージデバイスを選択することができる。上記のRAIDアレイ及びこれらのRAIDアレイの各々に対して追加の保護を行うストレージデバイスの数Qを含む3つの区分の例では、総ストレージデバイス数に対するRAIDパリティ情報を記憶するストレージデバイスの数の比率は、abcQ/LaMbNcQである。単一のデバイス故障の場合、上記の例における区分1~3では、再構成読み込み要求を受け取るストレージデバイスの数は、それぞれL、M及びNである。なお、一般に上記の説明は、図12の3つの異なる区分について行ったものである。このような実施形態では、所与のレイアウトが特定のデバイスグループに制限されるこの種のハード区分が、1つの区分内の再構成読み込みが別の区分の再構成読み込みと衝突しないことを保証することができる。しかしながら、他の実施形態では、区分が、上述したようなハードではないこともある。むしろ、デバイスのプールを考えた場合、これらのデバイスのいずれからもレイアウトを選択することができる。例えば、デバイスを大きなプールとして扱う場合、L1、M1、N11などのレイアウトを構成することが可能である。従って、構成が重複し、再構成読み込みが衝突しかねない可能性がある。プールのサイズに対してL、M及びNが小さい場合、通常の読み込みに対する再構成読み込みの割合を低く保つことができる。ここで図13を参照すると、データストレージサブシステムにおいて代替のRAID構成を選択する方法1300の1つの実施形態を示している。一般に、ネットワークアーキテクチャ100及びデータストレージアレイ120a~120b内で具体化される構成要素は、方法1300に従って動作することができる。この実施形態のステップを順番に示す。しかしながら、ステップによっては、図示のものとは異なる順序で行なうことができるもの、同時に行うことができるもの、他のステップと組み合わせることができるもの、及び別の実施形態には存在しないものもある。ブロック1302において、ストレージコントローラ174内のRAIDエンジン178又はその他のロジックが、所与の数のデバイスを使用して、ストレージサブシステムの各区分内のRAIDアレイにユーザデータを記憶すると決定する。その後、RUSH又はその他のアルゴリズムを使用して、いずれのデバイスを使用すべきかを選択することができる。1つの実施形態では、各区分が、同じ数のストレージデバイスを利用する。他の実施形態では、各区分が、異なる固有の数のストレージデバイスを利用してユーザデータを記憶することができる。ブロック1304において、ストレージコントローラ174が、いくつかのストレージデバイスがサブシステムの各区分内に対応するデバイス間エラー回復パリティデータを記憶するのをサポートすると決定することができる。この場合も、各区分は、同じ数又は異なる固有の数のストレージデバイスを利用してRAIDパリティ情報を記憶することができる。ブロック1306において、ストレージコントローラは、Q個のストレージデバイスが追加のデバイス間エラー回復パリティデータをサブシステムの区分にわたって記憶するのをサポートすると決定することができる。ブロック1308において、選択したストレージデバイスに、ユーザデータ及び対応するRAIDパリティデータを書き込むことができる。再び図12を参照すると、区分1のRAIDアレイ1210などの所与のRAIDアレイに書き込みが行われた時に、1又はそれ以上のビットのパリティ情報を生成して、区分3のストレージデバイスQ1に記憶することができる。ストレージコントローラ174が、所与の区分内で読み込み再構成を行う状態を検出した条件付きブロック1310場合、及び所与の区分が、RAIDパリティ情報を保持しているストレージデバイスを、いくつかの利用できないストレージデバイスを処理するのに十分な数だけ有している条件付きブロック1312場合、ブロック1314において、この所与の区分内の1又はそれ以上の対応するストレージデバイスを使用して単複の再構成読み込み動作を行う。この状態は、デバイス故障によって所与のRAIDアレイ内のストレージデバイスを利用できないこと、又はこれらのデバイスが所与のパフォーマンスレベル未満で動作していることを含むことができる。この所与のRAIDアレイは、所与の区分内のRAIDパリティ情報を記憶している数のストレージデバイスを使用して、最大数の利用できないストレージデバイスを処理することができる。例えば、上記の例の区分1のRAIDアレイ1210がLaのRAIDアレイである場合、このRAIDアレイ1210は、1<=k<=aとするk個のストレージデバイスが利用できない場合に、区分1内のストレージデバイスのみを利用して読み込み再構成を行うことができる。所与の区分が、RAIDパリティ情報を保持しているストレージデバイスを、いくつかの利用できないストレージデバイスを処理するのに十分な数だけ有していない条件付きブロック1312場合、及びこのいくつかの利用できないストレージデバイスを処理するのに十分なQ個のストレージデバイスが存在する条件付きブロック1316場合、ブロック1318において、1又はそれ以上の対応するQ個のストレージデバイスを使用して再構成読み込み動作を行う。読み込み再構成中には、ユーザデータを記憶している他の区分内の1又はそれ以上のストレージデバイスにアクセスすることができる。これらのストレージデバイスの選択は、1又はそれ以上のQ個のストレージデバイスに記憶されたパリティ情報の導出方法に基づくことができる。例えば、再び図12を参照すると、ストレージデバイスQ1に記憶された対応するRAIDパリティ情報を生成するために使用された可能性があるという理由で、読み込み再構成中に区分2のストレージデバイスD2にアクセスすることができる。いくつかの利用できないストレージデバイスを処理するのに十分な数のQ個のストレージデバイスが存在しない場合条件付きブロック1316、ブロック1320において、対応するユーザデータを別のソースから読み込むことができ、又はこれらのユーザデータを失われたものと見なすことができる。なお、上述の実施形態は、ソフトウェアを含むことができる。このような実施形態では、方法及び/又は機構を実装するプログラム命令をコンピュータ可読媒体で搬送し、又はこれに記憶することができる。プログラム命令を記憶するように構成された数多くのタイプの媒体が利用可能であり、これらは、ハードディスク、フロッピー登録商標ディスク、CD-ROM、DVD、フラッシュメモリ、プログラマブルROMPROM、ランダムアクセスメモリRAM及び他の様々な形態の揮発性又は不揮発性ストレージを含む。様々な実施形態では、本明細書で説明した方法及び機構の1又はそれ以上の部分が、クラウドコンピューティング環境の一部を成すことができる。このような実施形態では、1又はそれ以上の様々なモデルにより、インターネットを介してリソースをサービスとして提供することができる。このようなモデルとして、インフラストラクチャアズアサービスIaaS、プラットホームアズアサービスPaaS、及びソフトウェアアズアサービスSaaSを挙げることができる。IaaSでは、コンピュータインフラストラクチャがサービスとして配信される。このような場合、一般にサービスプロバイダがコンピュータ設備を所有し運営する。PaaSモデルでは、開発者がソフトウェアソリューションを開発するために使用するソフトウェアツール及び基本設備をサービスプロバイダがサービスとして供給しホストすることができる。通常、SaaSは、サービスプロバイダのライセンスソフトウェアをサービスオンデマンドとして含む。サービスプロバイダは、このソフトウェアをホストすることができ、又はこのソフトウェアを一定期間にわたって顧客に展開することができる。上記のモデルの数多くの組み合わせが可能であり、企図される。以上、実施形態についてかなり詳細に説明したが、上記開示を完全に理解すると、当業者には数多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正を全て含むと解釈すべきであることが意図される。"