(57)【要約】【課題】  畳み込みエンコードされたデータをＲＡＩＤに記憶するための方法、システム、およびコンピュータ・プログラムを提供する。【解決手段】  ＲＡＩＤは、デバイスに書き込まれるストライプ・データの冗長性を与えるために畳み込みエンコーディングを使用する。畳み込みエンコーディング・プロセスではパリティは使用されない。ＲＡＩＤからデータを読み取るために、及び１つまたは複数の障害のあるデバイスからの欠落エンコード済みデータを再ビルドするために、トレリス図における接続パスを選択する最小の（望ましくはゼロの）ハミング距離に基づいて、トレリス・デコーディングが使用される。【選択図】  図６
2006318467.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージ・デバイスと、
前記複数のストレージ・デバイスに結合され、前記複数のストレージ・デバイスから受け取ったコード化データを処理してデコード済みデータを生成するトレリス・デコーダであって、前記コード化データが現在および過去の情報ビットの畳み込みによって生成されたエラー訂正コード化データを含む、トレリス・デコーダとを含み、
障害のあるストレージ・デバイスが存在するかどうかを決定し、
障害のあるストレージ・デバイスが存在するという決定に応答して、前記障害のあるストレージ・デバイスに事前に記憶されたコード化データを含む再構成データを記憶するための記憶スペースを割り振り、前記デコード済みデータを処理して前記再構成データを生成し、割り振られた記憶スペースに前記再構成データを記憶する、
システム。
【請求項２】
前記デコード済みデータにおけるエラーの量を測定し、
前記エラーの量を前記複数のストレージ・デバイスに対するエラー限界と比較し、
前記エラーの量が前記ストレージ・デバイスの１つに対するエラー限界を越えたことに応答して、当該ストレージ・デバイスを前記障害のあるストレージ・デバイスとして識別する、
請求項１に記載のシステム。
【請求項３】
前記複数のストレージ・デバイスから自己監視分析および報告技術情報を受け取り、
前記自己監視分析および報告技術情報が前記ストレージ・デバイスの１つに対する障害を表すことに応答して、当該ストレージ・デバイスを前記障害のあるストレージ・デバイスとして識別する、
請求項１に記載のシステム。
【請求項４】
前記コード化データが１つまたは複数のワードを含み、前記ワードの各々はｎビット（但し、ｎはゼロよりも大きい）を含み、前記ワードの各々は前記情報の一部を処理する畳み込みエンコーダから生成され、前記複数のストレージ・デバイスのいずれも２つまたはそれ以上の連続したワードを持たない、請求項１に記載のシステム。
【請求項５】
前記コード化データが１つまたは複数のワードを含み、前記ワードの各々はｎビット（但し、ｎはゼロよりも大きい）を含み、前記ワードの各々は前記情報の一部を処理する畳み込みエンコーダから生成され、前記複数のストレージ・デバイスのいずれも前記ワードの各々における前記ｎビットのうちの２つ以上を持たない、請求項１に記載のシステム。
【請求項６】
前記コード化データに関連したメタデータを処理するメタデータ・コントローラを更に含み、前記メタデータが、前記コード化データのためのストレージ・ロケーションを指定するストレージ・ロケーション情報を含む、請求項１に記載のシステム。
【請求項７】
前記コード化データに関連したメタデータを処理するメタデータ・コントローラを更に含み、前記メタデータが、前記コード化データに対するエンコーディングのタイプを指定するエンコーダ情報を含む、請求項１に記載のシステム。
【請求項８】
少なくとも１つのホスト・コンピュータと、
複数のストレージ・デバイスと、
前記複数のストレージ・デバイスに結合され、前記複数のストレージ・デバイスから受け取ったコード化データを処理してデコード済みデータを生成するトレリス・デコーダであって、前記コード化データが現在および過去の情報ビットの畳み込みによって生成されたエラー訂正コード化データを含む、トレリス・デコーダとを含み、
障害のあるストレージ・デバイスが存在するかどうかを決定し、
障害のあるストレージ・デバイスが存在するという決定に応答して、前記障害のあるストレージ・デバイスに事前に記憶されたコード化データを含む再構成データを記憶するための記憶スペースを割り振り、前記デコード済みデータを処理して前記再構成データを生成し、前記割り振られた記憶スペースに前記再構成データを記憶する、
ストレージ・エリア・ネットワーク。
【請求項９】
前記複数のストレージ・デバイスが別々の物理ロケーションに配分される、請求項８に記載のストレージ・エリア・ネットワーク。
【請求項１０】
複数のストレージ・デバイスからコード化データを受け取るステップと、
トレリス・デコーダを使用して前記コード化データをデコードすることによってデコード済みデータを生成するステップと、
障害のあるストレージ・デバイスが存在するかどうかを決定するステップと、
障害のあるストレージ・デバイスが存在するという決定に応答して、前記障害のあるストレージ・デバイスに事前に記憶されたコード化データを含む再構成データを記憶するための記憶スペースを割り振り、前記デコード済みデータを処理して前記再構成データを生成し、前記割り振られた記憶スペースに前記再構成データを記憶するステップと、
を含む方法。
【請求項１１】
コンピュータに、
複数のストレージ・デバイスからコード化データを受け取る手順と、
トレリス・デコーダを使用して前記コード化データをデコードすることによってデコード済みデータを生成する手順と、
障害のあるストレージ・デバイスが存在するかどうかを決定する手順と、
障害のあるストレージ・デバイスが存在するという決定に応答して、前記障害のあるストレージ・デバイスに事前に記憶されたコード化データを含む再構成データを記憶するための記憶スペースを割り振り、前記デコード済みデータを処理して前記再構成データを生成し、前記割り振られた記憶スペースにおいて前記再構成データを記憶する手順と、
を実行させるためのコンピュータ・プログラム。
【請求項１２】
前記コンピュータに、更に、前記記憶スペースを割り振ることに対する料金を顧客に課捨て順を実行させる、請求項１１に記載のコンピュータ・プログラム。
【請求項１３】
前記コンピュータに、更に、前記割り振られた記憶スペースに前記再構成データを記憶することに対する料金を顧客に課す手順を実行させる、請求項１１に記載のコンピュータ・プログラム。
【請求項１４】
コンピュータ可読コードをシステムに統合するステップを含む、コンピューティング・インフラストラクチャを配備するための方法であって、前記コードが、前記システムと結合して、
複数のストレージ・デバイスからコード化データを受け取るステップと、
トレリス・デコーダを使用して前記コード化データをデコードすることによってデコード済みデータを生成するステップと、
障害のあるストレージ・デバイスが存在するかどうかを決定するステップと、
障害のあるストレージ・デバイスが存在するという決定に応答して、前記障害のあるストレージ・デバイスに事前に記憶されたコード化データを含む再構成データを記憶するための記憶スペースを割り振り、前記デコード済みデータを処理して前記再構成データを生成し、前記割り振られた記憶スペースに前記再構成データを記憶するステップと
を実行することができる、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ・ストレージに関するものである。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
本発明の課題は、畳み込みエンコードされたデータをＲＡＩＤ（redundant array of independent storage device）に記憶するための方法、システム、およびコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【０００３】
システム形式における本発明の実施例は、複数のストレージ・デバイスおよびそれらのストレージ・デバイスに結合されたトレリス・デコーダを含む。トレリス・デコーダは、ストレージ・デバイスから受け取ったコード化データを処理してデコード済みデータを生成する。コード化データは、現在および過去の情報ビットの畳み込みによって生成されたエラー訂正コード化データを含む。システムは、障害のあるストレージ・デバイスが存在するかどうかを決定し、そして、障害のあるストレージ・デバイスが存在するという決定に応答して、再構成データを記憶するための記憶スペースを割り振る。再構成データは、障害のあるストレージ・デバイスに予め記憶されていたコード化データを含む。システムは、デコード済みデータを処理して再構成データを生成し、割り振られた記憶スペースにその再構成データを記憶する。
【０００４】
ある実施例では、システムは、デコード済みデータにおけるエラーの量を測定し、そのエラーの量を複数のストレージ・デバイスの各々に対するエラー限界と比較し、そのエラーの量が１つのストレージ・デバイスに対するエラー限界を越えたことに応答して、そのストレージ・デバイスを障害のあるストレージ・デバイスとして識別する。ある実施例では、システムは、複数のストレージ・デバイスから自己監視分析および報告技術情報を受け取り、その自己監視分析および報告技術情報が１つのストレージ・デバイスに対する障害を表すことに応答して、そのストレージ・デバイスを障害のあるストレージ・デバイスとして識別する。ある実施例では、コード化データが１つまたは複数のワードを含み、各ワードがｎビット（ｎは０よりも大きい）を含み、各ワードが情報の一部分を処理する畳み込みエンコーダから生成され、複数のストレージ・デバイスのいずれも２つ以上の連続したワードを持たず、または各ワードにおけるｎビットのうちの２つ以上を持たない。ある実施例では、システムは、コード化データに関連したメタデータを処理するメタデータ・コントローラを含み、メタデータは、コード化データのためのストレージ・ロケーションまたはコード化データに対するエンコーディングのタイプを指定する、ストレージ・ロケーション情報を含む。
【発明を実施するための最良の形態】
【０００５】
同じ要素が同じ参照番号および記号で表されている図面を参照すると、図１は、例示的なストレージ・エリア・ネットワーク（ＳＡＮ）１０を示すブロック図である。ＳＡＮ１０は、一般には、スイッチング・ファブリック６６を形成するためにスイッチ６７が使用される交換アクセス・ネットワークとして動作するように設計される。ある実施例では、ＳＡＮ１０は、ファイバ・チャネル（ＦＣ）物理層上で動作する小型コンピュータ・システム・インターフェース（ＳＣＳＩ）プロトコルを使用して実装される。別の実施例では、ＳＡＮ１０は、InfiniBand、ＦＩＣＯＮ（FiberChannel CONnectivity の特別形態）、ＴＣＰ/ＩＰ、Ethernet（登録商標）、GigabitEthernet（登録商標、またはｉＳＣＳＩのような他のプロトコルを利用して実装することができる。スイッチ６７はホスト・コンピュータ６１、６２、６３、６４、６５とコントローラ８０との両方のアドレスを有するので、ホスト・コンピュータ６１〜６５のいずれも任意のコントローラ８０に交換可能に接続することができる。
【０００６】
ホスト・コンピュータ６１、６２、６３、６４、６５は、それぞれＩ／Ｏインターフェース７１、７２、７３、７４、７５を利用してファブリック６６に結合される。Ｉ／Ｏインターフェース７１〜７５は、任意のタイプのＩ／Ｏインターフェース、例えば、ＦＣループ、ファブリック６６に対する直接接続機構、または、ファブリック６６におよびファブリック６６からそれぞれ情報を転送するためにホスト・コンピュータ６１〜６５によって使用される１つまたは複数の信号線であってもよい。ファブリック６６は、例えば、２つ以上のコンピュータ・ネットワークを接続するために使用される１つまたは複数のＦＣスイッチ６７を含む。或る実施例では、ＦＣスイッチ６７は一般的なルータ・スイッチである。
【０００７】
スイッチ６７は、Ｉ／Ｏインターフェース７９を介してホスト・コンピュータ６１〜６５をコントローラ８０に相互接続する。Ｉ／Ｏインターフェース７９は、任意のタイプのＩ／Ｏインターフェース、例えば、Fiber Channel、Infiniband、Gigabit Ethernet、Ethernet、ＴＣＰ/ＩＰ、ｉＳＣＳＩ、ＳＣＳＩＩ／Ｏ インターフェースであってもよく、或いは、コントローラ８０におよびコントローラ８０からおよびその後複数のストレージ・デバイス９１〜９３にそれぞれ情報を転送するためにＦＣスイッチ６７によって使用される１つまたは複数の信号線であってもよい。図１に示された例では、ストレージ・デバイス９１〜９３およびコントローラ８０はＲＡＩＤ９０内で操作される。ＲＡＩＤ９０は、ストレージ・デバイス９１〜９３のいずれかの障害時にストレージ・デバイス９１〜９３と交換され得る予備ストレージ９７を含むことも可能である。ストレージ・デバイス９１〜９３のほかに更なるストレージをＲＡＩＤ９０に含むことも可能であろう。代替として、ストレージ・デバイス９１〜９３を相互におよびコントローラ８０から物理的に離隔して設置すると、１つの災害でストレージ・デバイス９１〜９３の１つしか危険にさらされずにすむであろう。
【０００８】
ＲＡＩＤ９０は、一般に、ＲＡＩＤのオペレーションを指示するために１つまたは複数のコントローラ８０を含む。コントローラ８０は多くの形式を取り得るし、組み込みシステム、分散制御システム、パーソナル・コンピュータ、ワークステーション等を含み得る。図１は、プロセッサ８２、メタデータ・コントローラ９８、ランダム・アクセス・メモリ（ＲＡＭ）８４、不揮発性メモリ８３、特定回路８１、コード化データ・インターフェース８５、およびホスト情報インターフェース８９を有する典型的なＲＡＩＤコントローラ８０を示す。プロセッサ８２、ＲＡＭ８４、不揮発性メモリ８３、特定回路８１、メタデータ・コントローラ９８、コード化データ・インターフェース８５、およびホスト情報インターフェース８９はバス９９を介して相互にコミュニケーションを行う。
【０００９】
代替として、ＲＡＭ８４および不揮発性メモリ８３は、特定回路８１、コード化データ・インターフェース８５、メタデータ・コントローラ９８、およびホスト情報インターフェース８９と共にプロセッサ８２内にあってもよい。プロセッサ８２は、既製のマイクロプロセッサ、カスタム・プロセッサ、ＦＰＧＡ、ＡＳＩＣ、または他の形式の個別ロジックを含んでもよい。ＲＡＭ８４は、一般に、計算されたデータ、スタック・データ、実行可能な命令等を保持するために、ホスト・コンピュータ６１〜６５によって書き込まれたデータまたはホスト・コンピュータ６１〜６５のために読み出されたデータのためのキャッシュとして使用される。更に、ＲＡＭ８４は、一般に、エンコーダからのコード化データ８７がストレージ・デバイス９１〜９３に記憶される前にそのデータ８７の一時的記憶のために使用される。エンコーダの例は畳み込みエンコーダ２２０（図１４）である。或る実施例では、畳み込みエンコーダ２２０は特定回路８１にあることも可能である。ＲＡＭ８４は、一般に、コード化データ８７がストレージ・デバイス９１〜９３から読み出された後、そのデータがデコーダ７７によってデコードされる前にそのデータの一時的記憶のために使用される。デコーダ７７の例は、図７におけるトレリス・デコーダ３００および図１１におけるトレリス・デコーダ５００である。
【００１０】
或る実施例では、ディストリビュータ１０１が、ソフトウェア、ファームウェア、専用ロジック、またはそれらの組合せによってプロセッサ８２に実装される。更に、ディストリビュータ１０１のすべてまたは一部分が、ホスト・コンピュータ６１〜６５の１つにおけるソフトウェア実装のように、コントローラ８０の外部にあってもよい。ディストリビュータ１０１は、１つまたは複数のストレージ・デバイスが障害を生じた場合、コード化データまたはソース情報がデコードされ得るようなフォーマットまたは非障害のストレージ・デバイスから再構成され得るようなフォーマットでそのコード化データ（即ち、コード化データ８７）をＲＡＭ８４またはストレージ・デバイスに直接配布する。書き込みプロセス中、ディストリビュータ１０１がストレージ・デバイス９１〜９３のようなストレージ・デバイスにデータを配布するとき、その配布されたデータがその後ストレージ・デバイスから読み出され得るよう、配布はメタデータ８８に従って行われる。読み取りプロセス中、ディストリビュータ１０１はストレージ・デバイス９１〜９３のようなストレージ・デバイスからデータを検索し、同じメタデータ８８に基づいてコード化データ８７をＲＡＭ８４に再アセンブルする。
【００１１】
不揮発性メモリ８３は、電気的消去可能プログラマブル・リード・オンリ・メモリ（ＥＥＰＲＯＭ）、フラッシュ・プログラマブル・リード・オンリ・メモリ（ＰＲＯＭ）、バッテリ・バックアップＲＡＭ、ハードディスク・ドライブ、または他の同様の装置のような任意のタイプの不揮発性メモリを含み得る。不揮発性メモリ８３は、一般に、実行可能なファームウェア、およびメタデータ８８のような任意の不揮発性データを保持するために使用される。メタデータ８８の詳細は図３に関連して更に後述される。
【００１２】
或る実施例では、コード化データ・インターフェース８５は、プロセッサ８２がストレージ・デバイス９１〜９３と通信することを可能にする１つまたは複数の通信インターフェース含む。ホスト情報インターフェース８９は、プロセッサ８２がファブリック６６、スイッチ６７、およびホスト・コンピュータ６１〜６５と通信することを可能にする。コード化データ・インターフェース８５およびホスト情報インターフェース８９は、ＲＳ−２３２、ＵＳＢ（Universal Serial Bus）、ＳＣＳＩ、Fiber Channel、Gigabit Ethernet 等のようなシリアル・インターフェースを含む。更に、コード化データ・インターフェース８５およびホスト情報インターフェース８９は、無線周波数（ＲＦ）（即ち、Bluetooth）のようなワイヤレス・インターフェースまたは赤外線（ＩＲ）のような光通信装置を含み得る。
【００１３】
或る実施例では、メタデータ・コントローラ９８は、ソフトウェア、ファームウェア、専用ロジック、またはそれらの組合せによってプロセッサ８２に実装される。更に、メタデータ９８のすべてまたは一部分が、ホスト・コンピュータ６１〜６５の１つまたは他の処理装置におけるソフトウェア実装のように、コントローラ８０の外部にあってもよい。メタデータ・コントローラ９８は、受け取った情報に関連したメタデータをストレージ・デバイス上にコード化データとして記憶するために管理する。或る実施例では、メタデータ・コントローラ９８は、コード化データとして記憶するために受け取った情報に関連したメタデータ（即ち、メタデータ８８）を生成し、変更し、維持し、記憶し、検索し、処理する責任がある。
【００１４】
特定回路８１は、コントローラ８０が、ストレージ・デバイス９１〜９３、コントローラ８０、およびデコーダ７７の環境冷却のためにファン制御のような独特の機能を遂行することを可能にするために更なるハードウェアを提供する。デコーダ７７はトレリス・デコーダとして実装され得る。特定回路８１は、パルス幅変調（ＰＷＭ）制御、アナログ・デジタル変換（ＡＤＣ）、デジタル・アナログ変換（ＤＡＣ）、排他的ＯＲ（ＸＯＲ）等を行う電子回路を含み得る。更に、特定回路８１のすべてまたは一部分が、ホスト・コンピュータ６１〜６５の１つにおけるソフトウェア実装のようにコントローラ８０の外部にあってもよい。
【００１５】
デコーダ７７は、ＲＡＩＤストレージ・デバイス（即ち、ストレージ・デバイス９１〜９３）から読み出されたコード化データをデコードするためにトレリス・デコーダとして実装され得る。トレリス図３００（図７）を使ってトレリス・デコーダのオペレーションを説明することができる。図７には、状態 S0〜S7 が示され、ストレージ・デバイスに記憶されるコード化データに情報をエンコードするために使用される畳み込みエンコーダの全メモリ・レジスタの初期内容がゼロに初期設定されるものとする。例えば、畳み込みエンコーダ２２０（図１４）のメモリ・レジスタ２３０〜２３２がゼロに初期設定される。これは、ストレージ・デバイスから読み出されたコード化データ８７をデコードしてオリジナルのホスト情報７８を生成するために使用されるトレリス図が常に状態S0 で始まり、状態 S0 で終わるという結果を有する。
【００１６】
トレリス図３００（図７）は状態 S0 310A で始まる。トレリス図３００は、S0 310A から S0 310B または S1 311B に遷移する。トレリス図３００における状態の番号付けにおける接尾部Ａから接尾部Ｂへの増加はブランチと呼ばれ、ブランチ・インデックスＩは接尾部Ａから接尾部Ｂに遷移する時にはゼロである。トレリス図３００は、S0310B から S0 310C または S1 311C に遷移し、S1 311B から S2 312C または S3 313C に遷移し、そしてブランチ・インデックスＩは１である。トレリス図３００は、S0310C から S0 310D または S1 311D に遷移し、S1 311C から S2 312D または S3 313D に遷移し、S2 312C からS4 314D または S5 315D に遷移し、S3 313C から S6 316D または S7 317D に遷移し、ブランチ・インデックスＩは２である。
【００１７】
トレリス図３００における次の一連の遷移はフルのデコード活動を示す。トレリス図３００は、S0 310D から S0 310E または S1 311E に遷移し、S1 311D から S2 312E または S2 313E に遷移し、S2312D から S4 314E または S5 315E に遷移し、あるいは S3 313D から S6 316E または S7 317E に遷移し、そしてブランチ・インデックスＩは３である。更に、トレリス図３００は、S7317D から S7 317E または S6 316E に遷移し、S6 316D から S5 315E または S4 314E に遷移し、S5 315D からS3 313E または S2 312E に遷移し、S4 314D から S1 311E または S0 310E に遷移する。
【００１８】
一般に、トレリス図では、ブランチ・インデックスＩ＝３に対して示されるものが複数回反復される。しかし、図７では、図を簡潔にするためにそのような反復を１つだけを示している。図７の残りに関して、トレリス図は、デコード・プロセスの終了を表すことを推測するために示される。トレリス図３００は、S0 310E から S0 310F のみに遷移し、S1 311E から S2 312F のみに遷移し、S2 312E から S4314F のみに遷移し、S3 313E ら S6 316F のみに遷移し、そしてブランチ・インデックスＩは４である。更に、トレリス図３００は、S7 317E からS6 316F のみに遷移し、S6 316E から S4314F のみに遷移し、S5 315E から S2 312F のみに遷移し、S4 314E から S0310F のみに遷移する。トレリス図３００は、S0 310F から S0 310G のみに遷移し、S2 312F から S4 314G のみに遷移し、ブランチ・インデックスＩは５である。更に、トレリス図３００は、S6316F から S4 314G のみに遷移し、S4 314F から S0 310G のみに遷移する。最後に、トレリス図３００は、S0 310G から S0310H のみに遷移し、ブランチ・インデックスＩは６である。更に、トレリス図３００は S4 314G から S0 310H のみに遷移する。
【００１９】
図７では、例示の強調表示された（太線で示された）デコード・パス S0 310A、S1 311B、S3 313C、S7 317D、S7 317E、S6 316F、S4 314G、および S0 310Hは、エンコード済みデータ 11100110010011 を獲得し、それを図１３のテーブルによって 1111000 にデコードする。
【００２０】
図６に示されたフローチャート７００は、ＲＡＩＤストレージ・デバイスから得られたエラー訂正コード化データをデコードするための１つの実施例を実装するプロセスを概説する。プロセスはステップ７０１において始まり、判断ブロック７０５に進んで、コントローラ８０が記憶情報に対する要求をソース（即ち、ホスト・コンピュータ６１〜６５）から受けたかどうかを決定する。コントローラ８０から要求された情報は、顧客、顧客にサービスを提供する第三者、ユーザ、またはコントローラ８０にアクセスを行う他の任意のエンティティによってストレージ・デバイス上に事前に記憶されていてもよい。記憶情報に対する要求を受けてない場合、プロセスはステップ７０５にサイクル・バックする。或る実施例では、ホスト情報インターフェース８９が記憶情報に対する要求を受け、コントローラ８０（即ち、プロセッサ８２、特定回路８１など）に結合された他のコンポーネントにその要求を転送する。記憶情報に対する要求を受けた場合、プロセスはステップ７０７に進む。そこでは、コントローラ８０が先ず、ホスト・コンピュータ６１〜６５の１つによって要求された所望ファイル名６２６（図３）（または他の識別子）に基づいて所望の記憶情報に関連したメタデータ８８を獲得することにより、コード化データが置かれているストレージ・デバイスを決定し（即ち、図３の指定子６２１の使用による）、コード化データのＬＢＡ６２２、コード化データを得るための転送長６２３、およびシーケンス番号６２５を決定する。メタデータ８８は不揮発性メモリ８３から得ることも可能であろう。
【００２１】
或る実施例では、メタデータ・コントローラ（即ち、メタデータ・コントローラ９８）がコード化データに関連したメタデータ８８を見つけて処理する。メタデータは、コード化データのストレージ・ロケーションを指定するストレージ・ロケーション情報およびコード化データのエンコーディングのタイプを指定するエンコーダ情報の少なくとも一方を含む。エラー訂正コード化データのストレージ・ロケーションを指定するストレージ・ロケーション情報は、ストレージ・デバイスの永続名、論理ブロック・アドレス、デバイス番号、論理ユニット番号、ボリューム・シリアル番号、または他のストレージ・ロケーション識別子を含み得る。プロセッサ８２は、ステップ７０７において、所望のメタデータ８８を不揮発性メモリ８３から見つけるようメタデータ・コントローラを実装するために使用することが可能である。
【００２２】
プロセスはステップ７０７からステップ７０８に進む。そこでは、コントローラ８０が読み取りコマンド（即ち、読み取りコマンド６０５（図２））を使用して個々のストレージ・デバイス９１〜９３からコード化情報を読み出し、それをＲＡＭ８４に入れる。例えば、図５を参照すると、V(1,1)、V(1,2)、V(4,1)、V(4,2)、V(7,1)、V(7,2)、V(10,1)、V(10,2) などがドライブ２８１から読み取られ、V(2,1)、V(2,2)、V(5,1)、V(5,2)、V(8,1)、V(8,2)、V(11,1)、V(11,2)などがドライブ２８２から読み取られ、V(3,1)、V(3,2)、V(6,1)、V(6,2)、V(9,1)、V(9,2)、V(12,1)、V(12,2) などがドライブ２８３から読み取られ、コード化データ２９０を完成する。読み取りコマンド内には、ターゲット・ストレージ・デバイスの論理ユニット番号６０９（図３のメタデータ８８から得られる）、開始論理ブロック・アドレス６０７（図３のメタデータ８８から得られる）、および論理ユニット番号６０９のストレージ・デバイスに記憶されたコード化データの転送長６０８（図３のメタデータ８８から得られる）がある。読み取りコマンド６０５はＳＣＳＩまたはFiber Channel インターフェースを介して実装され得る。読み取りコマンド６０５はＳＣＳＩ読み取りコマンドであり、それは使用可能な唯一の可能な読み取りコマンドである。読み取りコマンド６０５は、ストレージ・デバイス９１〜９３からコード化データを検索するために複数回使用され得る。読み取りコマンド６０５は、一般に、各ストレージ・デバイスに対して少なくとも１回は使用される。
【００２３】
図４は、エラー訂正コード化データを生成するよう情報を処理するために（2,1,3）バイナリ畳み込みエンコーダ（図１４）が使用されるときのストレージ・デバイス２６０に分散されたエラー訂正コード化データの例を示す。エラー訂正コード化データの各ワードは、例えば、図４に示されるような２ビット（ｎ＝２）を含み、第１ワードがV(1,1) および V(1,2)を含み、第２ワードが V(2,1) および V(2,2)を含み、第３ワードが V(3,1) および V(3,2)を含み、以下同様である。この例に関して、いずれのストレージ・デバイスも各ワードの２ビットのうちの１ビットしか受け取らない。
【００２４】
図５は、エラー訂正コード化データを生成するよう情報を処理するために（2,1,3）バイナリ畳み込みエンコーダ（図１４）が使用されるときのストレージ・デバイス２８０に分散されたエラー訂正コード化データの例を示す。エラー訂正コード化データの各ワードは、例えば、図５に示されるような２ビット（ｎ＝２）を含み、第１ワードがV(1,1) および V(1,2)を含み、第２ワードが V(2,1) および V(2,2)を含み、第３ワードが V(3,1) および V(3,2)を含み、以下同様である。この例に関して、いずれのストレージ・デバイスも２つ以上の連続したワードを受け取らない。この実施例に関して、連続したワードは、例えば、第１ワード（V(1,1),V(1,2)）および第２ワード（V(2,1),V(2,2)）または第２ワード（V(2,1),V(2,2)）および第３ワード（V(3,1),V(3,2)）を含む。非連続ワードの例は、第１ワード（V(1,1),V(1,2)）および第３ワード（V(3,1),V(3,2)）または第２ワード（V(2,1),V(2,2)）および第４ワード（V(4,1),V(4,2)）である。
【００２５】
図４に示されたデータ分散に関して、読み取りコマンド６０５は、ステップ７０８において６回呼び出され、ドライブ２６１〜２６６に記憶された情報を読み取る。図５に示されたデータ分散に関して、読み取りコマンド６０５は、ステップ７０８において３回呼び出され、ドライブ２８１〜２８３に記憶された情報を読み取る。
【００２６】
すべてのコード化データが各ドライブから読み取られてＲＡＭ８４に置かれると、プロセスはステップ７０９に進む。そこでは、コントローラ８０が各ドライブからのコード化データをコード化データ８７にアセンブルする。各ドライブから読み取られたコード化データからアセンブルされたコード化データ８７の例は、２７０（図４）および２９０（図５）である。このアセンブリはメタデータ８８のシーケンス番号６２５に基づいている。このシーケンス番号は、ＲＡＩＤを介して事前に分散されたコード化データからのコード化データ８７の適正なアセンブリを決定する。
【００２７】
同様に、図４は、ステップ７０９においてメモリ装置、例えばＲＡＭ８４、に記憶されたようなエラー訂正コード化データの例を表すテーブル２７０を示す。テーブル２７０は欄の形に編成され、各欄は、ステップ７０８においてそれぞれのストレージ・デバイス（即ち、ストレージ・デバイス９１〜９３）から読み取られたエラー訂正コード化データを含む。例えば、テーブル２７０の第１欄は、ステップ７０８においてドライブ２６１から読み取られたエラー訂正コード化データを示す。
【００２８】
図５は、ステップ７０９においてメモリ装置、例えばＲＡＭ８４、でアセンブルされたようなアセンブル済みエラー訂正コード化データ８７の例を表すテーブル２９０を示す。テーブル２９０は欄の形に編成され、各欄は、ステップ７０８においてそれぞれのストレージ・デバイスから読み取られたエラー訂正コード化データを含む。例えば、テーブル２９０の第１欄は、ステップ７０８においてドライブ２８１から読み取られたエラー訂正コード化データを示す。
【００２９】
コード化データ８７がＲＡＭ８４においてアセンブルされたステップ７０９の終了後、プロセスはステップ７１１に進む。そこでは、コード化データ８７がデコードされてデコード済みデータ（即ち、情報７８）を生成する。ステップ７１１は、ストレージ・デバイスに結合された（即ち、ＲＡＭ８４においてアセンブルされたコード化データ８７の使用によって）トレリス・デコーダ（即ち、１つまたは複数のホスト・コンピュータ６１〜６５に対するオリジナル情報７８を得るためにコード化データ８７をデコードする、特定回路８１におけるトレリス・デコーダ７７）によって達成され得る。トレリス・デコーダ７７は、ストレージ・デバイス９１〜９３から受け取ったコード化データを処理してデコード済みデータを生成する。コード化データは、情報７８における現在および過去のビットの畳み込みによって生成されたエラー訂正コード化データを含む。デコーダ７７は、図７または図１１に示されたトレリス・デコーダまたは任意の他のトレリス・デコーダであってもよい。代替として、デコーダ７７は、トレリス図のバイナリ・ツリー状の実装と考えられる「スタック・アルゴリズム」を使用することも可能である。
【００３０】
或る実施例では、デコーダ７７は、個別の状態図で各時間単位を表すために、エンコーダの状態図（図１２）を時間的に拡大する。その結果生じた構造が、図７および図１１に示されたように、トレリス図と呼ばれる。最小のハミング距離でトレリス図を通るパスが、所望の情報７８を生成するためにコード化データ８７をデコードするための望ましいパスである。望ましい最小ハミング距離はゼロであり、それは、コード化データ８７とそのコード化データ８７を情報７８にデコードするためにトレリス図を介して選択されたパスとの間に誤差がないことを表す。
【００３１】
ハミング距離は、トレリス図の当該ブランチに対して読み取られたワードおよびそのブランチにおける各パスに割り当てられたワードによって計算される。読み取られたワードおよび割り当てられたワードは、桁上げなしで加算され（ＸＯＲ）、そのブランチにおける各パスに対するハミング距離を生成する。例えば、読み取られたワードは 111 であったが、パスは 010 という割り当てられたワードを有する場合、ハミング距離は 111+010=101 である。
【００３２】
各ブランチにおけるハミング距離がゼロであることが望ましい。111 が読み取られたワードであり、111 という割り当てられたワードを有するパスが当該ブランチにあった場合、111+111=000 はゼロのハミング距離を表す。このパスは当該ブランチに対する望ましいパスであろうし、その同じパスに割り当てられた情報は、エンコーディングが生じる前のオリジナル情報を表すであろう。
【００３３】
ゼロのハミング距離が得られない場合、読み取られたエンコード済みデータに対して、トレリス図を通るすべての可能なパスが計算され、すべてのブランチにわたって最小のハミング距離を有するパスが、エンコード済みデータおよびオリジナル情報の両方を表すパスとして選択される。従って、トレリス図は、実際には、畳み込みコードに対する最尤デコーディング・アルゴリズムである。即ち、デコーダ出力選択は常に、最小メトリックをハミング距離の形で与えるコード・ワードである。
【００３４】
読み取り（デコーディング）プロセスに対して、トレリス図の最初のブランチは常に状態 S0 から生じ、トレリス図の最終ブランチは常に状態 S0 で終わる。これは、図１４におけるメモリ２３０〜２３２のようなすべてのメモリを畳み込みエンコーダにおいてゼロに初期設定してエンコーディング・プロセスを開始および終了させることを示している。
【００３５】
適正なオペレーションのために、デコーダ７７はメタデータ８８からのワードを含むビットの順序づけを、ストライプ幅６２４によって得る。例えば、テーブル２７０（図４）およびテーブル２９０（図５）におけるビットは異なって配列される。メタデータ８８におけるストライプ幅６２４に従うことにより、コード化データの個々のビットがトレリス図３００（図７）および５００（図１１）によって正しい順序で処理される。
【００３６】
或る実施例では、コード化データは１つまたは複数のワードを含む。各ワードはｎビット（ｎはゼロよりも大きい）を含み、各ワードは情報の一部分を処理する畳み込みエンコーダから生成され、複数のストレージ・デバイスのいずれも各ワードのｎビットのうちの複数ビットを持たない。
【００３７】
或る実施例では、コード化データは１つまたは複数のワードを含み、各ワードはｎビット（ｎはゼロよりも大きい）を含み、各ワードは情報の一部分を処理する畳み込みエンコーダから生成され、複数のストレージ・デバイスのいずれも２つ以上の連続したワードを持たない。
【００３８】
プロセスはステップ７１１からステップ７１２に進み、要求者によって要求された情報を生成するために必要なすべてのコード化データがデコーダ７７によってデコードされてしまったかどうかを決定する。その答えがイエスである場合、プロセスはステップ７１３に進む。そこでは、ホスト情報インターフェース８９がデコーダ７７から、およびその転送を行うために必要な、コントローラ８０（即ち、プロセッサ８２、特定回路８１など）に結合された任意の他のコンポーネントから情報７８を受け、コード化データ８７から取り出された情報７８を要求ホスト・コンピュータ６１〜６５に転送する。情報７８は、デコーダ７７がエラー訂正コード化データ８７を処理する前、処理している間、または処理した後、メモリ装置（即ち、ＲＡＭ８４、不揮発性メモリ８３、専用プロセッサ・メモリなど）に一時的に記憶されてもよい。エラー訂正コード化データ８７および取り出された情報７８は、ＳＡＮ１０の要求ホスト・コンピュータ６１〜６５への配布に先立ってＲＡＭ（即ち、ＲＡＭ８４）に記憶することが可能である。代替として、エラー訂正コード化データ８７は、ストレージ・デバイスから（図２の読み取りコマンドによって）読み出されるセグメントからアセンブルされるとき、不揮発性ストレージ・デバイス８３、別のストレージ・デバイス、キャッシュ・メモリなどに記憶することも可能である。或る実施例では、エラー訂正コード化データ８７は、記憶のためにストレージ・デバイスに事前に配布するために使用されたフォーマットと同じフォーマットでＲＡＭ８４に記憶される。
【００３９】
ステップ７１２において、すべてのコード化データ８７がデコードされた場合、ステップ７１３が実行される。ステップ７１３は要求者によって要求された情報７８を要求者に送り、他の要求を処理するためにプログラム制御をステップ７０５に戻す。ステップ７１２において、更なるコード化データ８７がデコードされる必要がある場合、ステップ７１５が実行される。
【００４０】
ステップ７１５では、コード化データ８７のトレリス・デコーディングがエラーを検出することがある。或る実施例では、非ゼロのハミング距離がデコーディング・プロセスにおいて見つかるたびに、デコーディング・エラーが検出される。コード化データ８７のデコーディングにおいてエラーが検出されない場合、（即ち、トレリス図３００または５００においてゼロのハミング距離を有するパスが見つかった場合）、制御はステップ７１１に戻ってデコーディング・プロセスを継続する。或る実施例では、ステップ７１５は、非ゼロのハミング距離でエラーを検出するためにコード化データのデコーディングを継続的に調べる。代替として、デコーディング・プロセスが周期的に検査されてもよい。例えば、継続的または周期的な検査は、エラーを検出するために、複数のビットをビット毎に検査すること、複数のワードをワード毎に検査すること、あるいはコード化データ、デコード済みデータ、または取り出された情報を検査することを含み得る。コード化データ、デコード済みデータ、取り出されたデータ、またはそれらの組合せにエラーがある場合、ストレージ・デバイスに障害が生じたかどうかを決定するために、制御はステップ７２０に進む。
【００４１】
ステップ７２０において、ストレージ・デバイスに障害がなかった場合、ステップ７２２が実行される。ステップ７２２において、エラーが訂正され、制御がステップ７１１に戻ってコード化データ８７のデコーディングを回復する。このエラー訂正は、エラー（非ゼロのハミング距離）が存在した前の状態にデコーディング・プロセスをバックアップすること、しかる後、最小ハミング距離に対するすべての可能なパスを考慮しながらデコーディング・プロセスを再開することを含む。この最小ハミング距離はゼロであることが望ましい。
【００４２】
或る実施例では、ステップ７２０は、個々のストレージ・デバイスにおける（即ち、ストレージ・デバイス９１〜９３の各々における）コード化データを読み取るときのＥＣＣ（エラー訂正コード）エラーの量を測定すること、および、ステップ７１５において、ＥＣＣエラーの量をストレージ・デバイス（即ち、ストレージ・デバイス９１〜９３）の各々におけるエラー限界と比較することによって達成される。ＥＣＣエラーの量が所与のストレージ・デバイスのエラー限界を越えたことに応答して、ステップ７２０において、システムは、そのストレージ・デバイスを障害のあるストレージ・デバイスとして識別する。
【００４３】
別の実施例では、ステップ７２０は、各ストレージ・デバイス（即ち、ストレージ・デバイス９１〜９３）から自己監視分析及び報告技術（Self Monitoring Analysis and Reporting Technology ： Ｓ.Ｍ.Ａ.Ｒ.Ｔ）情報を受け取ること、およびストレージ・デバイスの障害を表すＳ.Ｍ.Ａ.Ｒ.Ｔ情報に応答してそのストレージ・デバイスを障害のあるストレージ・デバイスとして識別することによって達成される。
【００４４】
Ｓ.Ｍ.Ａ.Ｒ.Ｔ技術は、ドライブ・エラー（即ち、ストレージ・デバイス９１〜９３のエラー）を表す状態を認識することを意図され、実際の障害が発生する前にデータのバックアップを可能にするために障害を表す十分な警報を与えるように設計される。ストレージ・デバイスは経時的な劣化に関する特定の属性を監視し得るが、突発的なドライブの障害を予測することはできない。
【００４５】
劣化に関する各属性がドライブの操作性能における特定の障害状態セットを監視し、誤った予測を最少にするように閾値が最適化される。Ｓ.Ｍ.Ａ.Ｒ.Ｔは、エラーが生じる比率を監視し、エラー比率の割合が容認不可能なレベルまで増加した場合に予測障害を知らせる。比率を決定するために、エラー事象がログされ、所与の属性に対する全オペレーションの数と比較される。インターバルは、比率を測定すべきオペレーションの数を定義する。現在のオペレーション数を追跡するカウンタはインターバル・カウンタと呼ばれる。
【００４６】
Ｓ.Ｍ.Ａ.Ｒ.Ｔはエラー比率を測定し、従って、各属性に対して、エラーの発生が記録される。カウンタが、現在のインターバルに対するエラーの数を追跡する。このカウンタは障害カウンタと呼ばれる。エラー比率は単に１オペレーション当たりのエラーの数である。Ｓ.Ｍ.Ａ.Ｒ.Ｔがエラー比率を記録するために使用するアルゴリズムは、エラーの数およびインターバルに対する閾値を設定する。インターバルが終了する前にエラーの数が閾値を越える場合、エラー比率は容認不可能なものなると考えられる。インターバルが終了する前にエラーの数が閾値を超えない場合、エラー比率は容認可能であると考えられる。いずれの場合も、インターバルおよび障害カウンタはリセットされ、プロセスがやり直される。
【００４７】
Ｓ.Ｍ.Ａ.Ｒ.Ｔは、ドライブが或る期間にわたって容認不能に動作するとき、予測障害を知らせる。各属性に対するエラー比率が容認不能となる回数を表す現行カウントを、ファームウェアが保持する。これを達成するために、カウンタは、エラー比率が容認不能になる度にインクリメントされ、エラー比率が容認可能になる度に（ゼロを超えないように）デクリメントされる。カウンタが継続的にインクリメントされて予測閾値に達すると、予測障害が知らされる。このカウンタは障害履歴カウンタとも呼ばれる。各属性に対して個別の障害履歴カウンタが存在する。
【００４８】
別の実施例では、ステップ７２０において、コントローラ８０が、例えば、コード化データ・インターフェース８５を介してＩ／Ｏ通信を確立することができないストレージ・デバイスのような障害のあるストレージ・デバイスが決定される。
【００４９】
ストレージ・デバイスに障害が生じた場合、フローチャート７００は、ステップ７１９から開始して、ステップ７２５に直接に進むことができる。障害のあるドライブを探索するために読み取りオペレーションを実行すること、および、その障害のあるドライブによって事前に保持されていたコード化データの再構成を始めることは必要ない。
【００５０】
障害のあるストレージ・デバイスが存在することをステップ７２０において決定したことに応答して、ステップ７２５が実行され、再構成データを記憶するための記憶スペースを割り振る。或る実施例では、ステップ７２５は、その割り振られた記憶スペースに対して予備ストレージ・デバイス（即ち、予備ストレージ・デバイス９７）を使用することによって達成される。そのような予備ストレージ・デバイスが、ストレージ・デバイス９１〜９３の１つを置換するために使用される場合、予備ストレージ・デバイス９７は、それが置換しようとする障害のあるデバイスと同等またはそれ以上の記憶容量を有する。更に、予備ストレージ・デバイス９７は、同じタイプのストレージ・デバイスであることが望ましい。即ち、ストレージ・デバイス９１〜９３がファイバ・チャネル接続を有するハードディスク・ドライブであった場合、予備ストレージ・デバイス９７もファイバ・チャネル接続を有するハードディスク・ドライブとなるであろう。或る実施例では、割り振られた記憶スペースは、ストレージ・デバイス９１〜９３の１つまたは複数個、ストレージ・デバイス９１〜９３の一部分、ＳＡＮ１０の内部または外部にある外部ストレージ・デバイス、コントローラ８０に結合されたメモリ・デバイスなどを含み得る。或る実施例では、再構成データは、障害のあるストレージ・デバイス上に事前に記憶されたコード化データ（即ち、畳み込みエンコーダによって生成されたデータ）を含む。
【００５１】
プロセスはステップ７２５からステップ７３０に進み、再構成データを生成するためのデコード済みデータの処理および割り振られた記憶スペースにおけるその再構成データの記憶を達成する（1e、14e、8f）。ステップ７３０および７３５は、例えば、コントローラ８０がトレリス・デコーダ７７の使用によってデコード済みデータを処理すること、ＲＡＭ８４にあるテーブル２７０（図４）またはテーブル２９０（図５）の内容全体を構成することによって障害のあるストレージ・デバイスに記憶されたデータのイメージを再構成すること、および、書き込みコマンド（即ち、図１５における書き込みコマンド６００）を使用して、障害のあるドライブ上にあったものに対応するイメージの欄を、割り振られた記憶スペース上に記憶すること、によって達成することが可能である。それらのイメージは、再構成プロセスの前に、再構成プロセス中に、または再構成プロセス後に、メモリ・デバイス（即ち、ＲＡＭ８４）に一時的に記憶することが可能である。更に、この再構成プロセスは、ホストによって最初に提供された情報を回復する。従って、再構成プロセスは、事前にエンコードされたデータをデコードし、読み取りプロセスが障害のあるデバイスに記憶されていたエンコード済みデータのセグメントの読み取りを要求する場合、その読み取りプロセスの一部と考えることもできる。ユーザが図４および図５におけるような障害のある畳み込みエンコードＲＡＩＤ上のデータの読み取り（デコーディング）を望む場合、欠落エンコード済みデータを障害のあるストレージ・デバイスから回復する同じ再構成プロセスが、所望の情報をそのユーザに提供する。或る実施例では、システムは、割り振られた記憶スペース上に再構成データを記憶するための料金を顧客（即ち、ユーザ）に課すことができる。料金は、システム、サービス提供者、第三者などから顧客に請求してもよい。料金は、使用された記憶スペースの量、均一料金、使用された割り振り済みストレージ・デバイスの数などに基づいてもよい。これは、例えば、データを記憶するためのサービス提供者との顧客契約によって達成することも可能である。その場合、サービス提供者は、顧客のデータを要求時に記憶および検索する責任がある。サービス提供者は、ストレージ・デバイスの管理者であってもよく、また顧客と他のパーティとの間のビジネス関係にある第三者であってもよい。顧客は、情報を記憶するためのシステム（即ち、図１のＳＡＮ１０）への接続を提供され得る。顧客は、その接続または他の手段を使用して自分の情報を、記憶のためにシステムに送ることが可能である。顧客によって送られる情報またはＳＡＮ１０によって受け入れられる情報の量または数は、データの量を測定するための既知の方法によって測定することが可能である。割り振られた記憶スペースに、再構成データを記憶するための料金は、その記憶のために送られた情報の量と、情報の流れの速度、使用の頻度、圧縮または非圧縮情報、一定の月極め比率、他の考慮事項のような他の要素を考慮することによって決定することが可能である。プロセスはステップ７３５からステップ７４０に進み、終了する。
【００５２】
或る実施例では、ステップ７２０、７２２、および７３０はデコーダ７７のオペレーションによって達成される。デコーダ７７は、ＲＡＩＤストレージ・デバイス（即ち、ストレージ・デバイス９１〜９３）から読み取られたコード化データをデコードするためにトレリス・デコーダとして実装することができる。トレリス・デコーダのオペレーションに関しては後述することにする。
【００５３】
或る実施例では、ステップ７２０および７２２は、図７、図１０、および図１１におけるトレリス・デコーディングのために、図８に示されたフローチャート３４０のステップ３４１、３４２、３４３、３４４、３４５、３４７、および３４８、並びに図９に示されたフローチャート３６０によって達成される。図８では、プロセスはステップ３４１から開始する。プロセスはステップ３４２に進み、そこでは、ブランチ・インデックスＩがゼロにセットされる。トレリス図のブランチは畳み込みエンコーダ（図１２）の出力の１ワードを表す。例えば、トレリス図３００は１ワード内に２ビットを有し、トレリス図５００は１ワード内に３ビットを有する。トレリス・デコーダは、ゼロのハミング距離が得られるとき、一般に一時に１つのブランチを順次にデコードするので、ブランチ・インデックスＩは重要である。ゼロのハミング距離が得られたということは、エラーが検出されず、障害のあるストレージ・デバイスからの欠落データが存在しないことを意味し、更に、コード化データ８７におけるエンコード済みデータ・ワードに正確に一致するブランチ・インデックスＩにおける単一のパスが識別されたことを意味する。トレリス・デコーダの価値は、それがブランチによってシーケンス外れを予期して、エラーを伴うブランチをバイパスすることができ、誤ったブランチに続くブランチを使用して、その誤ったブランチを訂正することができることである。
【００５４】
プロセスはステップ３４２から判断ステップ３４３に進む。そこでは、コード化データ８７の１ワードにおけるｎビットすべてがストレージ・デバイス９１〜９３から得られたかどうか、またはそれらビットのうちの或るものがブランチＩにとって欠落しているかどうかの決定が行われる。各ワードはｎビットを含み、ｎビットの各セットはトレリス図３００および５００における１つのブランチを含む。ｎビットすべてがブランチＩに対して得られた場合、プロセスはステップ３４４に進む。そこでは、ＸＯＲ（排他的ＯＲ）オペレーションが、（ａ）符号化データ８７から得られたエンコード済みデータのｎビットすべてと、（ｂ）図７のトレリス図３００（または、代替として図１１のトレリス図５００）のブランチ・インデックスＩを含むパスにおける状態遷移との間で行われる。例えば、図７のトレリス図３００のブランチ・インデックスＩ＝０に対して、読み取られたエンコード済みデータは 11 である（エンコード済みデータの単一のワードが一時に処理される）。トレリス図は、S0 310A から S0 310B または S1311B への遷移を可能にする。S0 310A から S0 310B への遷移はエンコード済みデータ 00 を表し、S0 310A から S1 311B への遷移はエンコード済みデータ11 を表す。11 の読み取られたデータと S0 310A から S1 311B への遷移との間のＸＯＲプロセスは、判断ステップ３４５においてゼロのハミング距離（ゼロ・エラー）を与え（11XOR 11 = 00）、これが２つの可能性の間で行うべき適切な選択であること、および所望のデコード済み情報が 1 であることを表す。判断ステップ３４５において、パスがゼロのハミング距離（ゼロ・エラー）によって識別される場合、プロセスはステップ３４７に進む。そこでは、ゼロのハミング距離を有するパスが正しいパスとして選択される。次に、プロセスは判断ステップ３４８に進む。そこでは、コード化データ８７のサイズを決定するメタデータ８８毎にすべてのデータが処理されたかどうかによってプロセスが終わったかどうかの査定が行われる。ステップ３４８においてプロセスが未だ終っていないと仮定すると、ステップ３４９においてブランチ・インデックスＩが１だけ増加され、プロセスは、ステップ３４３に戻って更なるデータを読み取ろうとする。プロセスは、それがステップ３４８において終了する場合、ステップ３９８に進み、そこでは、コード化データ８７をデコードすることによって得られたオリジナル情報７８がホスト・コンピュータ６１〜６５の１つに送られ、しかる後、プロセスは終了する。
【００５５】
或る実施例では、ステップ７２０、７２５、７３０、および７３５（図６）が図７のトレリス図３００または図１１のトレリス図５００に対する、図８に示されたフローチャート３４０のステップ３４３を介してステップ３５１に到達することによって達成される。判断ステップ３４３において、ｎビットすべてが得られなかった場合（即ち、図１０のＩ＝１の破線パスとして示されるように、ブランチのすべてのビットが得られなかった場合）、プロセスはステップ３５０に進み、そこでは、欠落ビットの数Ｑが決定される。例えば、長さｎ＝２ビットのワードに対して、Ｑは、デバイス２６３、２６４（図４）の１つに障害が生じ、他のデバイスが十分に動作的である場合に１となるであろう。しかし、Ｑは、デバイス２８１〜２８３（図５）の１つに障害が生じた場合、ｎに等しくなるであろう。次に、プロセスは判断ステップ３５１に進む。そこでは、図１の予備ストレージ・デバイス９７のような予備ストレージ・デバイスが既に使用可能であるかどうかの照会が行われる。ステップ３５１における答えがノーである場合、プロセスはステップ３５２に進み、そこでは、障害のあるストレージ・デバイスを置換するために、予備ストレージ・デバイスがユーザによって得られる。或る実施例では、予備ストレージ・デバイスのためにストレージ・デバイスを予備に割り当てるための料金を顧客（即ち、ユーザ）に課すことが可能である。予備ストレージ・デバイス９７を得ることは、例えば、障害のあるストレージ・デバイスに関する保証が消滅した場合、ユーザが予備ストレージ・デバイスを購入することを含む。一般に、この購入は、顧客が最初に予備ストレージ・デバイスを呼び出すとき、電子的に行われるであろう。保証期間が依然として生きている場合、予備ストレージ・デバイスが無料で提供されることもある。
【００５６】
或る実施例では、予備ストレージ・デバイスがユーザによって必要とされるまで、予備ストレージ・デバイスはユーザによって購入されないままである。予備ストレージのコストは、その予備ストレージが保証期間中に呼び出される場合、ゼロであることがある。ステップ３５２は、既存の予備ストレージが利用されるとき、製造者による置換予備ストレージの自動出荷も含む。この置換予備ストレージは、障害のあるストレージが除去された場所に置かれるであろう。或る実施例では、置換ストレージは、ストレージ・デバイス９１〜９３の異なる物理ロケーションに設置することが可能である。例えば、置換ストレージは高速インターフェース（即ち、インターネット、イントラネット、ＴＣＰ／ＩＰなど）によって要求時にアクセスすることが可能である。障害のあるストレージは、保証契約の一部として、障害分析のために工場に戻されることもある。次に、プロセスはステップ３５２からステップ３５３に進む。そこでは、図９のフローチャート３６０のステップ３６１への遷移が行われる。ステップ３５１において、答えがイエスである場合、プロセスはステップ３５３に直接に進む。或る実施例では、ストレージ・デバイス（即ち、ＲＡＩＤ９０におけるストレージ・デバイス９１〜９３）は個別の物理ロケーションに配置される。例えば、ストレージ・デバイス９１，９２、および９３は、それぞれ、異なる部屋、ビルディング、都市、州、国などにストレージ・デバイス９２〜９３を設けることによって相互に物理的に分離され得る。
【００５７】
図１０では、エンコード済みデータが、図１２に示されたエンコーダによってエンコードされたデータのような、２ビットのワードを含むものと仮定される。図４におけるデバイス２６３〜２６４のような１ビット幅のストライプを有する一対の隣接したデバイスおよび図５のデバイス２８２のような２ビット幅のストライプを有する単一のデバイスが壊滅的な障害のためにすべてのデータを喪失したものと仮定される。図８および図９は、フローチャート３４０のステップ３４３においてそのデータを読み取ることができなかった場合、そのデータが再構成される方法を示す。
【００５８】
或る実施例では、ステップ７２０、７２５、７３０、および７３５（図６）が、図８に示されたフローチャート３４０のステップ３４６を介してステップ３５１に到達することによって達成される。判断ステップ３４５において、ゼロ・エラーを有するパスが識別されない場合、処理はステップ３４６に進む。そこでは、Ｑ＝ｎをセットすることによって、処理されたワードのｎビットすべてが誤っているものと仮定され、プロセスは前述の判断ブロック３５１に進み、しかる後、フローチャート３６０（図９）のステップ３６１に進む。
【００５９】
図９では、プロセスはステップ３６１において開始し、判断ステップ３６２に進む。そこでは、ブランチＩにおけるすべてのビットが失われた（即ち、Ｑ＝ｎ）かどうか、およびｎビットすべてがブランチＩの喪失のために再構成される必要があるかどうかの決定が行われる。ステップ３６２における答えがイエスである場合、プロセスはステップ３６３に進む。そこでは、失われたブランチＩがスキップされ、合計（Ｑ−１）＊ｎ個の更なるビットが、Ｑ−１個のワードを表す次のＱ−１個のブランチから読み取られる。これがトレリス図の価値あるところであり、ブランチＩからの欠落エンコード済みデータを決定するために、後続のブランチを「先読み」して使用することが可能である。次に、ステップ３６４において、ｎ個の読み取りビットと、トレリス図３００のＩ＋１からＩ＋（Ｑ−１）までのブランチにおける許容可能なパスとの間で、ＸＯＲ（排他的ＯＲ）プロセスがｎビットのグループで行われる。次に、ステップ３６５において、ブランチＩ＋１乃至Ｉ＋（Ｑ−１）における所望のパスが、ゼロのハミング距離（即ち、ゼロ・エラー）を有するブランチおよびゼロのハミング距離で相互に接続する事前に識別されたブランチである。ゼロのハミング距離はデコーディングにおけるゼロ・エラーと等価である。
【００６０】
一旦、ブランチＩ＋１乃至Ｉ＋（Ｑ＋１）においてデコーディング・パスが設定されると、欠落ブランチＩが、事前に識別されたブランチＩ−１および新たに識別されたブランチＩ＋１乃至Ｉ＋（Ｑ−１）におけるパスを接続するパスとして再構成される。この「接続性」は、トレリス図を通る正しいパスを設定するという点でクリティカルである。図７のトレリス図３００における強調表示された太線として示されたデコード済みパス全体が、トレリス図における各ブランチにおける個々のパスの連続的接続によって達成される。それは、ゼロのハミング距離によって識別されるこの再構成されたパスであり、ステップ３５１において購入された予備のデバイスに書き込まれる。次に、プロセスはステップ３６５からステップ３６６（図９）に進む。そこでは、ブランチ・インデックスがＱ−１だけインクリメントされて再構成プロセスのこのフェーズ中にデコードされたブランチを表す。しかる後、プロセスはステップ３６６からステップ３７８に進む。そこでは、回復した欠落エンコード済みデータが予備ストレージに記憶される。しかる後、プロセスはステップ３７８からステップ３７９に進み、そこでは、プロセスが図８のステップ３５５に戻る。
【００６１】
図１０は、図１２に示された（2,1,3）畳み込みエンコーダによりエンコードされたデータに関するデータ再構成の一例を示す。図１０の場合、失われたデータはすべてブランチ・インデックスＩ＝１を含むものであり、それはＱ＝２喪失ビットおよびＱ＝ｎを意味する。最後の既知の状態は、ブランチ・インデックスＩ＝０に対して計算されたS1 311B である。図１０は、すべての不可能な状態がトレリス図３００から除去されることによって、図７のトレリス図３００から作成された。図１０に関して、ブランチＩ＝１に対して、容認可能な遷移は、S1311B から S2 312C および S3 313C への遷移であり、ブランチＩの欠落エンコード済みデータを再構成するためには、これら２つの遷移のどちらがエンコード済みデータによって実際に行われたかに関する決定が、行われる必要がある。ブランチＩに関する欠落データを再構成するため、フローチャート３４０（図８）がブランチを「先読み」し、エンコード済みデータが、ステップ３６４に示されるようにブランチＩ＝２（Ｑ＝２）であるブランチＩ＋Ｑ−１に対してコード化データ８７から読み取られる。そのエンコード済みデータは、図１０によれば01 である。S2 312C から S4 314D への遷移は図１３のテーブル２９０に従って 11 を表し、S2 312C から S5 315D への遷移は00 である。同様に、S3 313C から S6 316D への遷移は図１３のテーブル２９０に従って 10 を表し、S3 313C から S7 317D への遷移は01 を表す。
【００６２】
フローチャート３６０（図９）のステップ３６４によれば、ブランチＩ＝２（Ｉ＋Ｑ−１＝２）に対して読み取られたエンコード済みデータとブランチＩ＝２に対する４つの可能なパスによって表されたエンコード済みデータとの間のＸＯＲプロセスは下記の結果、即ち、S3 313C から S7 317D への遷移に対して、01ＸＯＲ01=00、S3 313C から S6 316D への遷移に対して、10ＸＯＲ01=10、S2312C から S5 315D への遷移に対して、00ＸＯＲ01=01、および S2 312C から S4 314D への遷移に対して、11ＸＯＲ01=10 を与える。従って、S3313C から S7 317D への遷移は、ブランチＩ＝２に対するゼロのハミング距離（01ＸＯＲ01=00）に基づいた唯一の可能なパスを表す。トレリス図におけるデコードされたパス相互間の必要な接続性に基づいて、欠落エンコード済みデータが、ブランチＩ＝１におけるS1 311B から S3 313C への遷移によって表されなければならない。欠落エンコード済みデータは 10 である。従って、ブランチＩ＝１およびＩ＝２に対するエンコード済みデータは10 および 01 であり、これらの２つのブランチに対するデコードされた情報は 11 である。デコーディングが２つのブランチに対して行われたので、ブランチ・インデックスはステップ３６６においてＱ−１＝１ずつ、および、デコーディング・プロセスが進行していると仮定すると、ステップ３４９において再び１ずつ、増加しなければならない。再構成されたエンコード済みデータがＲＡＩＤ９０の予備ストレージ９７に記憶される。この再構成がユーザ開始読み取りプロセスの一部として行われた場合、再構成プロセスの一部として得られたオリジナル情報は、例えばホスト・コンピュータ６１〜６５の１つへの最終的な送信のために、ＲＡＭ８４に置かれる。
【００６３】
ステップ３６３〜３６６（図９）がブランチＩにおけるｎビットすべてを再構成する。ステップ３６２において、Ｑがｎに等しくない場合、ブランチＩのすべてではない幾つかのビットが回復され、プロセスは、ブランチＩの部分的再構成のためにステップ３６２からステップ３７０に進む。
【００６４】
ステップ３７０において、読み取られる使用可能なビットがトレリス・デコーダのブランチＩにおける各許容可能なパスとＸＯＲされる。しかる後、プロセスはステップ３７０から判断ステップ３７１に進む。そこでは、読み取られたビットに対してゼロ・エラーを有するブランチＩにおける所望のパスを一意的に識別するに十分な残存情報があるかどうかの判断が行われる。答えがイエスである場合、プロセスはステップ３７２に進む。そこでは、オリジナル・データおよび欠落エンコード済みデータの両方を与えるためにゼロ・エラーを有するブランチＩにおけるパスが選ばれる。しかる後、プロセスはステップ３７２からステップ３７８に進む。そこでは、回復された欠落エンコード済みデータが予備ストレージに記憶される。しかる後、プロセスはステップ３７８からステップ３７９に進み、図８のステップ３５５に戻る。
【００６５】
図１０のブランチＩにおける部分的に完全な情報の一例は、ブランチＩ＝１に対して１ビットが取り出され、１ビットが欠落している場合である。ブランチＩ＝１における部分的に回復されたデータの存在が図９のステップ３６２において検出される。 S1 311B から S2 312C へのパスはエンコード済みデータ 01 を表す。S1 311B から S3 313C へのパスはエンコード済みデータ10 を表す。従って、２ビット対のデータにおける先頭ビットまたは末尾ビットが使用可能である場合、これは図９のステップ３７１〜３７２を介して図１０のブランチＩ＝１に対する正しいパスを決定するに十分である。例えば、先頭ビットが１であり、末尾ビットが喪失ビットである場合、再構成されたエンコード済みデータは、先頭ビット１を有するブランチＩ＝１における唯一の許容し得るパスがS1 311B から S3 313C へのパスであること、即ち、それが、ゼロのハミング距離を生じる唯一の許容可能なパスであることに基づいて、10 である。そこで、その再構成データは、図９のステップ３７８において図１の予備ストレージ９７に記憶される。この再構成が図６のプロセス７００のようなユーザ開始読み取りプロセスの一部として行われた場合、再構成プロセスの一部として得られたオリジナル情報がＲＡＭ８４に置かれる。
【００６６】
ステップ３７１において、読み取られたビットに対してゼロのハミング距離を有するブランチＩにおけるパスを識別するために十分なコード化データの残存ビットが存在しない場合、プロセスはステップ３７３に進む。そこでは、次のｎビットがコード化データ８７から読み取られ、トレリス図のブランチＩ＋１において分析されるワードを形成する。しかる後、プロセスはステップ３７４に進む。ステップ３７４では、トレリス・デコーダのブランチＩ＋１における各許容可能なパスとｎ個の読み取られたビットとのＸＯＲが行われ、ゼロのハミング距離（ゼロ・エラー）を有するパスを分離する。図７および図１１は、特定のトレリス・デコーダ３００および５００の例である。部分的に読み取られたブランチＩと両立しないブランチＩ＋１におけるパスが許容可能であるとは考えられず、無視される。プロセスはステップ３７４からステップ３７５に進む。そこでは、ゼロのハミング距離を有するブランチＩ＋１におけるパスを選択する。ブランチＩにおけるパスは、そのパスがブランチＩ−１およびＩ＋１において既に識別されたパスがすべて接続されるように選択される。これは、個々のブランチ・パスがトレリス図の全域で隣接ブランチにおけるパスに接続されなければならないことを意味する。このようにして、ブランチＩに対する欠落エンコード済みデータ並びにブランチＩおよびブランチＩ＋１の両方に対するオリジナル情報が識別される。しかる後、プロセスはステップ３７５からステップ３７７に進む。そこでは、ブランチ・インデックスＩが単位数だけインクリメントされる。しかる後、プロセスは、既に説明したステップ３７７からステップ３７８に進む。
【００６７】
図１１のトレリス図５００のように、１ワード内に３ビットがある場合、ブランチＩの回復は、ゼロのハミング距離を有するブランチＩ−１、Ｉ、Ｉ＋１、およびＩ＋２を通る接続パスを見つけるために、ブランチＩ＋１およびＩ＋２の「先読み」を行うことで可能である。
【００６８】
データ再構成は、障害後に、バックグラウンド・プロセスの使用によってまたはフォアグラウンド・プロセスの使用によって行うことが可能である。バックグラウンド・プロセスは、コントローラ８０が、ホスト・コンピュータ６１〜６５の如何なる関与にも関係なく、データ再構成を行う場合である。フォアグラウンド・プロセスは、コントローラ８０が、データを再構成するようにホスト・コンピュータ６１〜６５の１つによって特別に要求される場合である。データは、真の第１ストライプから真の最終ストライプまでバックグラウンドにおいて再構成され得る。更に、データ・ファイルが相互に無関係にエンコードされるので、顧客により要求されるとき、データをフォアグラウンドで再構成することが可能である。一旦データがフォアグラウンドで再構成されると、コントローラ８０がバックグラウンドにおける再構成活動を監視し且つフォアグラウンドにおいてどのファイルが既に再構成されたかに関してスキャンするのであれば、そのデータはバックグラウンドで再構成される必要がない。エンコード済みデータを２回、即ち、フォアグラウンドで１回（ホスト・コンピュータ６１〜６５の１つによって要求されたユーザ要求に基づいて）およびバックグラウンドで再び（欠落エンコード済みデータがフォアグラウンドにおいて既に再構成されたことを、コントローラ８０によって実行されたバックグラウンド・プロセスが無視したため）、再構成する必要はない。
【００６９】
図１２には、（2,1,3）バイナリ畳み込みエンコーディングのための状態図２００が示される。ＲＡＩＤ９０からホスト・コンピュータ６１〜６５の１つへの図６の読み取りプロセス７００中に使用されるのは図７のトレリス・デコーダ３００であり、それは、ホスト・コンピュータ６１〜６５の１つからＲＡＩＤ９０へのオリジナルの書き込みプロセス中に状態図２００によって作成されたコード化データ８７をデコードする。状態図２００は、８つの状態、即ち、S0210、S1 211、S2 212、S3 213、S4 214、S5 215、S6 216、および S7 217  を含む。状態図２００における状態相互間の個々の遷移が数および方向において制限される。例えば、状態S0 210 において始まるエンコーディング・プロセスは、S0 210 に戻るように遷移するかまたは S1 211 に進むことができる。同様に、S1 211 からのプロセスは、S2212 または S3 213 にのみ遷移し得る。状態図２００における状態相互間の各遷移は、１ビットの情報を２ビットのエラー訂正コード化データにエンコードするという結果を生じる。このエンコーディングは、更に、図１３におけるテーブル２９０に関連して更に説明される。
【００７０】
図１３におけるテーブル２９０は、４つの欄、即ち、初期状態２９１、宛先状態２９２、入力情報２９３、およびエラー訂正コード化データ２９４を有する。状態図２００における合計８個の状態と、１つの特定状態から次の直ちに起こり得る状態への２つの可能な遷移とに基づいて、テーブル２９０における合計１６個の行が存在する。テーブル２９０は、状態図２００から作成され、ここでは、コード化データを生成するための情報のエンコーディングおよびオリジナル情報を得るためのエンコード済みデータのデコーディングの両方を表すために使用される。
【００７１】
図１２には、S0 210、S1 211、S3 213、S7 217、S7 217、S6 216、S4 214、および S0 210 を含む強調表示されたエンコーディング・パスが入力情報1111000 の例示エンコーディングのために示される。S0 210 から S1 211 への遷移は 1 を11 にエンコードする。S1 211 から S3213 への遷移は 1 を 10 にエンコードする。 S3 213 から S7 217 への遷移は 1 を 01 にエンコードする。S7 217 から S7217 への遷移は 1 を 10 にエンコードする。S7 217 から S6 216 への遷移は 0 を 01 にエンコードする。S6 216 から S4214 への遷移は 0 を 00 にエンコードする。最後に、S4 214 から S0 210 への遷移は 0 を 11 にエンコードする。この結果は、入力情報（即ち、ホスト・コンピュータ６１〜６５からのホスト情報）1111000がＲＡＩＤ９０に記憶するためにエラー訂正コード化データ 11100110010011 にエンコードされるということである。図７のトレリス図３００において、エラー訂正コード化データ11100110010011 がデコードされてオリジナル情報 1111000 を生成し、それは図７に示された強調表示パスである。
【００７２】
図１４には、図１２の状態図２００および図１３のテーブル２９０のバイナリ（2,1,3）コードのためのエンコーダ回路２２０が示される。エンコーダ回路２２０は、コントローラ８０の特定回路８１に存在し得る。代替として、エンコーダ回路２２０はコントローラ８０の外に実装されてもよい。エンコーダ回路２２０は、エンコードするための入力データ・ストリームＵ（Ｊ）２２１を一時に１ビットずつ受ける。エンコーダ回路２２０は、エンコーディング・プロセスのためのレジスタ２３０、２３１、および２３２を含むｍ＝３ステージのシフト・レジスタを含む。レジスタ２３０〜２３２の初期内容はゼロであり、従って、図７のトレリス図３００および図１１のトレリス図５００に表されるようなトレリス・デコーディング・プロセスは常に状態S0 で開始および終了する。
【００７３】
図１４を参照すると、入力情報ストリームＵ（Ｊ）２２１並びにレジスタ２３０、２３１、および２３２の出力が、出力Ｖ（Ｊ,１）２４１を生成するための加算機構２４０および出力Ｖ（Ｊ,２）２４３を生成するための加算機構２４２を含むｎ＝２モジュロ−２加算機構（バイナリ加算のための桁上げを生じない）によって選択的に加算される。マルチプレクサ２５１は、個々のエンコーダ出力Ｖ（Ｊ,１）２４１およびＶ（Ｊ,２）２４３を直列化してエンコード済み出力Ｖ２５０にする。モジュロ２加算機構は、特定回路８１においてＸＯＲ（排他的ＯＲ）ゲートとして、あるいは、代替として、ソフトウェア、ファームウェア、専用ロジックなどの使用によって実装することが可能である。モジュロ２バイナリ加算が線形オペレーションであるため、このエンコーダは線形フィードフォワード・シフト・レジスタとして動作し得る。図１４におけるＶ（Ｊ,１）およびＶ（Ｊ,２）によって定義されるように、インデックスＪに対するＶ２５０の各増分的出力はワードと呼ばれる。図７におけるトレリス図３００および図１１のトレリス図５００の各ブランチはこれらのワードの１つを表す。従って、トレリス・デコーディングは、一時に１つのワードを供給される畳み込みエンコーダの出力に対応するために、１つのブランチが１つのワードを表すことによって行われる。
【００７４】
図１５は、ＳＣＳＩ書き込みコマンドの一例である書き込みコマンド６００を示す。このコマンドは、開始論理ブロック・アドレス（ＬＢＡ）６０２、転送長６０３、および論理ユニット番号（ＬＵＮ）６０４を含む。ＬＵＮ６０４は、再構成されたエンコード済みデータが書き込みコマンド６００によって書き込まれる予備ストレージ９７のような予備ストレージ・デバイスを指定する。開始ＬＢＡは、データを受け取るべき予備ストレージ９７における最初の論理ブロック・アドレスを表し、転送長６０３は、どれほど多くのデータが転送されるかを表す。書き込みコマンド６００は、ＳＣＳＩまたは Fiber Channel インターフェースにおいて実装することが可能である。書き込みコマンド６００は、利用可能な唯一の可能な書き込みコマンドである。他のＳＣＳＩ書き込みコマンドは、例えば、その書き込みコマンドがうまく終了する前に、書き込まれたデータが検証されるという書き込み及び検証を含む。
【００７５】
ここで開示された実施例は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、またはハードウェア及びソフトウェアの両方の要素を含む実施例の形式を取り得る。或る実施例では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがそれに限定されないソフトウェアで実装される。
【００７６】
更に、ここで開示された実施例は、コンピュータまたは何らかの命令実行システムによって、あるいはそれに関連して使用するためのコンピュータ可用媒体またはコンピュータ可読媒体からアクセスし得るコンピュータ・プログラムの形を取ることが可能である。この説明のために、コンピュータ可用媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、或いはそれに関連して使用するためのプログラムを含み、記憶し、通信し、伝播し、または搬送することが可能な任意の装置であってもよい。
【００７７】
媒体は、電子、磁気、電磁気、赤外線、または半導体システム（または装置もしくはデバイス）であってもよい。コンピュータ可読媒体は、半導体またはソリッドステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、固定磁気ディスク、および光ディスクを含む。光ディスクの例は、コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク読み取り／書き込み（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【００７８】
プログラム・コードを記憶または実行するに適したデータ処理システムは、システム・バスを介してメモリ素子に直接的または間接的に結合された少なくとも１つのプロセッサを含み得る。メモリ素子は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、バルク・ストレージ、およびプログラム・コードが実行中にバルク・ストレージから検索されなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的記憶を行うキャッシュ・メモリを含み得る。
【００７９】
入出力デバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むが、それに限定されない）は、直接にまたはＩ／Ｏコントローラ介してシステムに結合することが可能である。
【００８０】
ネットワーク・アダプタも、データ処理システムが専用ネットワークまたは公衆ネットワークを介して他のデータ処理システムあるいはリモート・プリンタまたはストレージ・デバイスに結合されることを可能にするためにシステムに結合され得る。モデム、ケーブル・モデム、及び Ethernet カードは、幾つかの現在使用可能なタイプのネットワーク・アダプタである。
【００８１】
ここで開示された実施例は、標準的なプログラミングまたはエンジニアリング技法を使用してソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生成するように、方法、装置、またはコンピュータ・プログラムとして実装することが可能である。
【００８２】
或る実施例では、本発明は、図６、図８、および図９に示されたフローチャートで表されるステップを遂行するためにプロセッサ８２（図１）またはコントローラ８０（図１）が実行し得る命令を含む。
【００８３】
別の実施例では、本発明は、任意の他のコンピュータ・プログラム内にあって、コントローラ８０の外または内のコンピュータが実行する命令を含む。いずれの場合も、命令は、例えば、磁気的情報記憶媒体、光学的情報記憶媒体、および電子的情報記憶媒体などを含む情報記憶媒体にエンコードされ得る。「電子的記憶媒体」は、例えば、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、FlashＰＲＯＭ、コンパクト・ディスク、スマート・メディアなどを意味する。
【００８４】
或る実施例は、上述の実施例に関するオペレーションを実行するためにコンピュータ可読コードをシステムに統合することを含む、コンピューティング・インフラストラクチャを配備するための方法に関するものでもよい。例えば、図６、図８、および図９は、上述の実施例の使用によって情報をコード化データの形で取り出すためのステップを示す。コンピュータ可読コードは、システム（即ち、ＳＡＮ１０）と結合して上述の実施例のオペレーションに関するステップを実行することができる。コンピューティング・インフラストラクチャの配備（デプロイメント）は、上述の実施例のサービス、製造、または構成中に行うことが可能である。例えば、コンサルティング・ビジネスは多くのシステムに対するサービス責任を持つことがある。そのようなサービス責任は、システム・アップグレード、エラー診断、性能の調整および向上、新たなハードウェアのインストール、新たなソフトウェアのインストール、他のシステムとの構成などのようなタスクを含み得る。サービスの一部として、あるいは別のサービスとして、サービス担当者は、上記の実施例のオペレーションを効果的に可能にするように、上述の技法に従ってシステムを構成し得る。例えば、そのような構成は、コードが実行されるとき、システムが上述の実施例を実装するために上述の技法を実行するよう、コンピュータ命令、パラメータ、定数（すなわち、畳み込みエンコーディングのタイプ、１ワードにおけるビットの数ｎ、ストライプ幅、ストレージ・デバイスの数など）、割込みベクトルのメモリへのローディングを含み得る。
【００８５】
上記の記述は、説明のために、上記の実施例の十分な理解を与えるように特定の専門語を使用した。しかし、実施例のオペレーションを実用化するためには、特定の詳細を必要としないということは当業者には明らかであろう。別の例では、実施例から不要な逸脱を回避するために、周知の回路およびデバイスがブロック図形式で示される。従って、特定の実施例に関する上記の記述は例示および説明を目的として行われている。それらは、網羅的であることまたは開示されたそのままの形式に実施例のオペレーションを限定することを意図するものではない。明らかに、上記の教示事項から見て、多くの修正および変更が可能である。
【００８６】
図６、図８、および図９のロジックは、特定の順序で生じる特定のオペレーションを示す。別の実装方法では、或る論理オペレーションは異なる順序で実行され、修正され、除去され得る。更に、ステップが上記のロジックに加えられ、依然として上記の実装方法に適合し得る。更に、ここで開示された方法は順次に生じ得るし、或る幾つかのオペレーションは並行して処理され得るし、あるいは単一のプロセスによって実行されるものとして説明したオペレーションは分散プロセスによっても実行され得る。
【００８７】
図６、図８、および図９のロジックはソフトウェアで実装することが可能である。このロジックはホスト・システムのオペレーティング・システムの一部またはアプリケーション・プログラムであってもよい。更なる実装方法では、このロジックは、ＳＡＮ１０によって管理された記憶領域に、またはリード・オンリ・メモリもしくは他の配線型のデバイスに維持することも可能である。望ましいロジックを、ハードディスク・ドライブにおいてまたはプログラマブルおよび非プログラマブル・ゲート・アレイ・ロジックにおいて実装することも可能である。
【００８８】
ＲＡＩＤの当業者は、上記の実施例と同等の他の実施例を開発することも可能であろう。本明細書において使用された用語および表現は、説明のために使用されたものであり、限定するために使用されたのではなく、そのような用語および表現の使用では、図示および記述された機能の均等物およびその一部分を排除することを意図するものでもない。本発明の技術的範囲は「特許請求の範囲」によってのみ定義および限定される。
【図面の簡単な説明】
【００８９】
【図１】例示的なストレージ・エリア・ネットワーク（ＳＡＮ）を示すブロック図である。
【図２】例示的な読み取りコマンドを示す図である。
【図３】メタデータ構造を示す図である。
【図４】２ビット・ワード出力エンコーダのための１ビット幅ストライプを有する畳み込みＲＡＩＤを示す概略図である。
【図５】２ビット・ワード出力エンコーダのための２ビット幅ストライプを有する畳み込みＲＡＩＤを示す概略図である。
【図６】畳み込みエンコードされたＲＡＩＤからのエンコード済みデータの読み取りに関するフローチャートである。
【図７】（2,1,3）コードのためのトレリス・デコーダを示す図である。
【図８】欠落エンコード済みデータを検出するためにトレリス・デコーダを使用するためのフローチャートである。
【図９】欠落エンコード済みデータおよびそれが表す情報を再構成するためにトレリス・デコーダを使用するためのフローチャートである。
【図１０】（2,1,3）コードのためのトレリス・デコーダを、欠落情報の再構成に関連して示す図である。
【図１１】（3,2,1）コードのためのトレリス・デコーダを示す図である。
【図１２】（2,1,3）エラー訂正コードのためのエンコーダ状態図である。
【図１３】図１２の（2,1,3）エラー訂正コードのためのエンコーディング状態を示す表である。
【図１４】２出力、１入力、および３ステージの遅延素子を有する（2,1,3）バイナリ畳み込みエンコーダ回路を示す図である。
【図１５】再構成されたエンコード済みデータを予備ストレージに書き込むために使用される例示的なＳＣＳＩ書き込みコマンドを示す図である。
【図１】
2006318467.tif 000003
【図２】
2006318467.tif 000004
【図３】
2006318467.tif 000005
【図４】
2006318467.tif 000006
【図５】
2006318467.tif 000007
【図６】
2006318467.tif 000008
【図７】
2006318467.tif 000009
【図８】
2006318467.tif 000010
【図９】
2006318467.tif 000011
【図１０】
2006318467.tif 000012
【図１１】
2006318467.tif 000013
【図１２】
2006318467.tif 000014
【図１３】
2006318467.tif 000015
【図１４】
2006318467.tif 000016
【図１５】
2006318467.tif 000017