(57)【特許請求の範囲】
【請求項１】
複数のストレージデバイスに接続されたストレージコントローラを含むデータストレージサブシステム、
を備える、コンピュータシステムであって、
前記ストレージコントローラは：
複数のストレージデバイスのデータの論理グループ間のマッピングを追跡するマッピングテーブルを保守し、
データの第１の論理グループの第１の範囲内のスナップショットデータが、データの第２の論理グループの第２の範囲内のスナップショットデータに相当することを検出し、
前記第１の範囲内のスナップショットデータは前記第２の範囲内のスナップショットデータに相当することの検出に応答して、データの前記第２の論理グループの前記第２の範囲の、データの前記第１の論理グループの前記第１の範囲へのマッピングを前記マッピングテーブルに保存し、
前記第２の範囲の前記第１の範囲へのマッピングを前記マッピングテーブルに保存することに応じて、前記マッピングテーブルにおける前記第２の範囲に相当する複数のエントリーを無効にするように
構成されるコンピュータシステム。
【請求項２】
前記第１の論理グループの前記第１の範囲及び前記第２の論理グループの前記第２の範囲は、第１のボリュームに関連する、請求項１に記載のコンピュータシステム。
【請求項３】
前記第１の論理グループの前記第１の範囲のスナップショットデータは読み出し専用である、請求項１に記載のコンピュータシステム。
【請求項４】
スナップショットデータの前記第１の範囲は、前記第１の論理グループのアドレス空間内の第１のオフセットに配置され、
データの前記第２の範囲は、前記第２の論理グループのアドレス空間内の第２のオフセットに配置され、
前記ストレージコントローラは、第３のオフセットを用いて、前記第２の論理グループが前記第１の論理グループにアラインされるインジケータを保存するように構成され、
前記第３のオフセットは、前記第２のオフセットと前記第１のオフセットとの差に等しい、請求項１に記載のコンピュータシステム。
【請求項５】
前記マッピングは前記マッピングテーブル内の第１のエントリに保存され、前記第１のエントリは前記第２の論理グループに割り当てられる、請求項１に記載のコンピュータシステム。
【請求項６】
ストレージシステムにおいて使用するための方法であって、前記ストレージシステムは複数のストレージデバイスを含み、前記方法は、
コンピュータプログラム命令によって、コンピュータで実行され、
複数のストレージデバイスのデータの論理グループ間のマッピングを追跡するマッピングテーブルを保守するステップ、
データの第１の論理グループの第１の範囲内のスナップショットデータが、データの第２の論理グループの第２の範囲内のスナップショットデータに相当することを検出するステップ、
前記第１の範囲内のスナップショットデータは前記第２の範囲内のスナップショットデータに相当することの検出に応答して、データの前記第２の論理グループの前記第２の範囲の、データの前記第１の論理グループの前記第１の範囲へのマッピングを前記マッピングテーブルに保存するステップ、
前記第２の範囲の前記第１の範囲へのマッピングを前記マッピングテーブルに保存することに応じて、前記マッピングテーブルにおける前記第２の範囲に相当する複数のエントリーを無効にするステップ、
を含む、ストレージシステムにおいて使用するための方法。
【請求項７】
前記第１の論理グループの前記第１の範囲及び前記第２の論理グループの前記第２の範囲は、第１のボリュームに関連する、請求項６に記載の方法。
【請求項８】
前記第１の論理グループの前記第１の範囲の前記スナップショットデータは読み取り専用である、請求項６に記載の方法。
【請求項９】
データの前記第１の範囲は、前記第１の論理グループのアドレス空間内の第１のオフセットに配置され、
データの前記第２の範囲は、前記第２の論理グループのアドレス空間内の第２のオフセットに配置され、
第３のオフセットを用いて、前記第２の論理グループが前記第１の論理グループにアラインされるインジケータが保存され、
前記第３のオフセットは、前記第２のオフセットと前記第１のオフセットとの差に等しい、請求項６に記載の方法。
【請求項１０】
前記マッピングは前記マッピングテーブル内の第１のエントリに保存され、前記第１のエントリは前記第２の論理グループに割り当てられる、請求項６に記載の方法。
【請求項１１】
プログラム命令を記憶するコンピュータ可読ストレージ媒体であって、
前記プログラム命令は、プロセッサに：
複数のストレージデバイスのデータの論理グループ間のマッピングを追跡するマッピングテーブルを保守するステップ、
データの第１の論理グループの第１の範囲内のスナップショットデータがデータの第２の論理グループの第２の範囲内のスナップショットデータに相当することを検出するステップ、
前記第１の範囲内のスナップショットデータは前記第２の範囲内のスナップショットデータに相当することの検出に応答して、データの前記第２の論理グループの前記第２の範囲の、データの前記第１の論理グループの前記第１の範囲へのマッピングを前記マッピングテーブルに保存するステップ、
前記第２の範囲の前記第１の範囲へのマッピングを前記マッピングテーブルに保存することに応じて、前記マッピングテーブルにおける前記第２の範囲に相当する複数のエントリーを無効にするステップ、
を実行させる、プログラム命令を記憶するコンピュータ可読ストレージ媒体。
【請求項１２】
前記第１の論理グループの前記第１の範囲及び前記第２の論理グループの前記第２の範囲は、第１のボリュームに関連する、請求項１１に記載のコンピュータ可読ストレージ媒体。
【請求項１３】
前記第１の論理グループはスナップショットデータの複数の範囲を含み、前記第２の論理グループはデータの複数の範囲を含む、請求項１１に記載のコンピュータ可読ストレージ媒体。
【請求項１４】
スナップショットデータの前記第１の範囲は、前記第１の論理グループのアドレス空間内の第１のオフセットに配置され、
データの前記第２の範囲は、前記第２の論理グループのアドレス空間内の第２のオフセットに配置され、
第３のオフセットを用いて、前記第２の論理グループが前記第１の論理グループにアラインされるインジケータが保存され、
前記第３のオフセットは、前記第２のオフセットと前記第１のオフセットとの差に等しい、請求項１１に記載のコンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム内のボリューム領域の重複排除の実行に関する。
【背景技術】
【０００２】
コンピュータメモリストレージ及びデータ帯域幅が増大するに従って、業務において日常的に管理されるデータの量及び複雑性も増大する。データセンタ等の大規模分散型ストレージシステムは典型的には、多数の業務動作を実行する。サーバルームと呼ばれることもあるデータセンタは、１つ又は複数の業務に付随するデータの記憶、管理及び配布のための、物理又は仮想中央レポジトリである。分散型ストレージシステムは、１つ又は複数のネットワークによって相互接続されたクライアントコンピュータに接続してよい。分散型ストレージシステムのいずれの部分の性能が不良である場合、会社の運営を害し得る。従って分散型ストレージシステム、データ可用性及び高性能機能化に関する高い基準を維持する。
【０００３】
論理ボリュームマネージャ又はディスクアレイマネージャ等のソフトウェアアプリケーションは、マスストレージアレイ上にスペースを割り当てる手段を提供する。更にこのソフトウェアにより、システム管理者は、論理ボリュームを含むストレージグループのユニットを生成できるようになる。ストレージ仮想化により、物理ストレージから論理ストレージを抽出し、これによりエンドユーザが物理ストレージを識別することなく論理ストレージにアクセスできる。
【０００４】
ストレージ仮想化を支援するために、ボリュームマネージャは、エンドユーザからの論理アドレスを用いた入ってくる入力／出力（Ｉ／Ｏ）要求を、ストレージデバイス内の物理位置に関連するアドレスを用いた新規の要求に翻訳することによって、Ｉ／Ｏリダイレクションを実行する。いくつかのストレージデバイスは、ソリッドステートストレージデバイス内で使用してよいアドレス翻訳層といった、追加のアドレス翻訳機構を含んでよいため、論理アドレスから上述の別のアドレスへの翻訳は、唯一の又は最終的なアドレス翻訳を表さない場合がある。
【０００５】
多くのストレージシステムに関して、別個の複数の論理ボリュームの複数の大きな領域は、同一のデータを含むことが多く、又は複数のボリューム間で再利用されることが多い。例えばシステムは、組み込み済みシステムソフトウェアがボリュームの第１のギガバイト（ＧＢ）を占有する同一のゴールドマスターから生成された多数の仮想マシンを含んでよい。このシステムソフトウェアは複数のボリュームに関して同一であってよく、これは複数のボリューム内におけるデータの大きな領域の二重化につながる。ストレージシステムの効率及び動作性能を改善するために、ストレージシステム内に記憶される同一のデータの量を削減するための努力が必要である。
【０００６】
以上に鑑みて、ボリューム領域の重複排除を実行するためのシステム及び方法に対する需要が存在する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ボリューム領域の粗粒度重複排除を実行するためのシステム及び方法の様々な実施形態を考える。
【課題を解決するための手段】
【０００８】
ストレージシステムは、ストレージコントローラ及び１つ又は複数のストレージデバイスを含んでよい。このストレージシステムは、１つ又は複数のホストクライアントシステムに接続してよい。一実施形態では、ストレージコントローラはボリューム及び媒体を利用して、ストレージシステム内に記憶されているクライアントデータを追跡する。媒体はデータの論理グループ化として定義され、各媒体は、データの論理グループ化を識別するための識別子を有する。
【０００９】
ストレージコントローラは、ボリューム−媒体マッピングテーブルを保守することによって各ボリュームを単一の媒体にマッピングでき、この媒体をそのボリュームのアンカー媒体と呼ぶ。各媒体は、いずれの個数の他の媒体に対してマッピングでき、ストレージコントローラはまた、媒体マッピングテーブルを保守することによってアンカー媒体と下層媒体との間の関係を追跡でき、各下層媒体はスナップショットを表す。ストレージコントローラはまた、アドレス翻訳テーブルを保守する。アドレス翻訳テーブルは、物理ストレージ位置に対する媒体及びブロック番号のマッピングを含んでよい。
【００１０】
一実施形態では、ストレージコントローラは、同一である２つのボリュームの大きな領域の粗粒度重複排除を実行するよう構成してよい。この粗粒度重複排除は、ボリュームを生成してこれらを下層媒体に対してマッピングした後で実行してよい。第１の及び第２の媒体がブロックのある範囲に関して同一のコンテンツを有することをストレージコントローラが発見すると、ストレージコントローラは全てのマッピングを第１の媒体に統合して、第２の媒体の上記範囲を第１の媒体へとマッピングしてよい。
【００１１】
一実施形態では、ボリューム領域の粗粒度重複排除は、下層のデータに対して微粒度重複排除を実行した後で実行してよい。第１のボリューム領域と同一である第２のボリューム領域に関して、多数の微粒度マッピングテーブルエントリが既に生成されている。第１のボリューム領域と第２のボリューム領域とが同一であることの検出に応答して、媒体マッピングテーブルにおいて新規のエントリを生成して、第１のボリューム領域が第２のボリューム領域の下層にあることを記録してよい。この新規のエントリは、第２のボリューム領域に対応する複数の微粒度マッピングテーブルエントリを置換してよく、これによりストレージシステム内に記憶されるメタデータ量を削減できる。
【００１２】
これらの及びその他の実施形態は、以下の説明及び添付の図面を考察することによって明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】図１は、ストレージシステムの一実施形態を示す概略ブロック図である。
【図２】図２は、媒体の有向非巡回グラフ（ｄｉｒｅｃｔｅｄ  ａｃｙｃｌｉｃ  ｇｒａｐｈ：ＤＡＧ）の一実施形態の概略ブロック図である。
【図３】図３は、媒体マッピングテーブルの一実施形態を示す。
【図４】図４は、ストレージコントローラが利用するテーブルの一実施形態を示す。
【図５】図５は、粗粒度重複排除動作の一実施形態の概略ブロック図である。
【図６】図６は、ボリューム領域を重複排除するための方法の一実施形態を示す概略フロー図である。
【発明を実施するための形態】
【００１４】
本発明は様々な修正例及び代替形態を許容するものであるが、例として複数の具体的実施形態を図面に示し、また本明細書において詳細に説明する。しかしながら、図面及びこれに対する詳細な説明は、本出願において開示されている特定の形態に本発明を限定することを意図したものではなく、その反対に、本発明は、添付の請求項によって定義される本発明の精神及び範囲内のあらゆる修正例、均等物、代替例を包含できることを理解されたい。
【００１５】
以下の説明では、本発明の完全な理解を提供するために、多数の具体的な詳細を挙げる。しかしながら、これらの具体的な詳細を用いずに本発明を実施してもよいことを、当業者は認識するべきである。例えば公知の回路、構造、信号、コンピュータプログラム命令、技術については、本発明を不明瞭にするのを回避するために、詳細には示していない。
【００１６】
ここで図１を参照すると、ストレージシステム１００の一実施形態の概略ブロック図が示されている。ストレージシステム１００は、ストレージコントローラ１１０及びストレージデバイス群１３０、１４０を含んでよく、上記ストレージデバイス群１３０、１４０はいずれの個数のストレージデバイス群（又はデータストレージアレイ）の代表例である。図示したように、ストレージデバイス群１３０はストレージデバイス１３５Ａ〜Ｎを含み、これらはいずれの個数及びタイプのストレージデバイス（例えばソリッドステートドライブ（ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ：ＳＤＤ））の代表例である。ストレージコントローラ１１０はクライアントコンピュータシステム１２５に直接接続してよく、またストレージコントローラ１１０は、ネットワーク１２０を介して、クライアントコンピュータシステム１１５から離間した状態でクライアントコンピュータシステム１１５に接続してよい。クライアント１１５、１２５は、システム１００においてデータを記憶しデータにアクセスするためにストレージコントローラ１１０を利用できるいずれの個数のクライアントの代表例である。なお、いくつかのシステムは、ストレージコントローラ１１０に直接又は離間した状態で接続された単一のクライアントしか含まなくてもよい。
【００１７】
ストレージコントローラ１１０は、ストレージデバイス１３５Ａ〜Ｎへのアクセスを提供するよう構成されたソフトウェア及び／又はハードウェアを含んでよい。ストレージデバイス群１３０、１４０から離間したものとしてストレージコントローラ１１０を図示しているが、いくつかの実施形態では、ストレージコントローラ１１０をストレージデバイス群１３０、１４０のうちの一方又はそれぞれの中に配置してよい。ストレージコントローラ１１０は、ベースオペレーティングシステム（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ：ＯＳ）、ボリュームマネージャ、本明細書で開示される様々な技術を実装するための追加の制御論理を含んでよく、又はこれらに接続してよい。
【００１８】
ストレージコントローラ１１０は実施形態に応じて、いずれの個数のプロセッサを含んでよく、及び／又はいずれの個数のプロセッサ上で実行されてよく、また、単一のホストコンピューティングデバイスを含んでよく、及び／若しくは単一のホストコンピューティングデバイス上で実行されてよく、又は複数のホストコンピューティングデバイスに亘って分散されていてよい。いくつかの実施形態では、ストレージコントローラ１１０は一般に、１つ若しくは複数のファイルサーバ及び／若しくはブロックサーバを含むか、又は１つ若しくは複数のファイルサーバ及び／若しくはブロックサーバ上で実行されてよい。ストレージコントローラ１１０は、デバイスの不良又はデバイス内のストレージ位置の不良によるデータの損失を防止するために、デバイス１３５Ａ〜Ｎに亘ってデータを複製するための様々な技術のうちのいずれを使用してよい。ストレージコントローラ１１０はまた、共通のデータセグメントを重複排除することによって、デバイス１３５Ａ〜Ｎに記憶されるデータ量を削減するための、様々な微粒度重複排除技術のうちのいずれを利用してよい。
【００１９】
ストレージコントローラ１１０はまた、システム１００内でスナップショットを生成してこれを管理するよう構成してよい。従って媒体のセットは、ストレージコントローラ１１０によって記録され、保守される。媒体のほとんどは、特定のボリュームが使用中の最新の媒体等の１つ又は複数の選択された媒体を除いて、読み出し専用であってよい。読み出し専用媒体は既に生成されたスナップショットを表す。各媒体は論理的に、媒体内の全てのブロックを含む。しかしながら、媒体が生成された時点から媒体が閉鎖された時点までに変化したブロックのみが保存され、これらのブロックに対するマッピングを上記媒体を用いて保守してもよい。
【００２０】
様々な実施形態では、ストレージコントローラ１１０が複数のマッピングテーブルを保守してよい。これらのマッピングテーブルは、媒体マッピングテーブル、ボリューム−媒体間マッピングテーブル、アドレス翻訳テーブル、重複排除テーブル、オーバレイテーブル及び／又はその他のテーブルを含んでよい。いくつかの実施形態では、これらのテーブルのうちの２つ以上に記憶された情報を、単一のテーブルへと結合してよい。媒体マッピングテーブルを利用して、媒体と下層の媒体との間のマッピング及びボリュームと媒体との間のマッピングを記録及び保守してよく、ボリューム−媒体間マッピングテーブルを利用して、ボリュームと媒体との間のマッピングを記録及び保守してよい。
【００２１】
アドレス翻訳テーブルは、複数のエントリを有するアドレス翻訳テーブルを含んでよく、各エントリは、対応するデータ成分に関する仮想−物理間マッピングを保持する。このマッピングテーブルを用いて、クライアントコンピュータシステム１１５、１２５からストレージデバイス１３５Ａ〜Ｎ内の物理的位置へ、論理読み書き要求をマッピングできる。受信した読み書き要求に対応する探索動作の間に、所定の媒体に関連するマッピングから「物理」ポインタ値を読み出してよい。続いてこの物理ポインタ値を用いて、ストレージデバイス１３５Ａ〜Ｎ内の物理的位置を配置してよい。なお、物理ポインタ値を用いて、ストレージデバイス１３５Ａ〜Ｎのうちの所定のストレージデバイス内の別のマッピングテーブルにアクセスしてもよい。その結果、物理ポインタ値と標的ストレージ位置との間に１つ又は複数のレベル間接参照を存在させることができる。
【００２２】
様々な実施形態において、媒体ＩＤ、論理又は仮想アドレス、セクタ番号等を含むキーを用いて、アドレス翻訳テーブルにアクセスしてよい。受信された読み書きストレージアクセス要求は、特定のボリューム、セクタ及び長さを識別してよい。ボリュームＩＤは、ボリューム−媒体間マッピングテーブルを用いて媒体ＩＤに対してマッピングしてよい。セクタは媒体内に記憶されたデータの論理ブロックであってよい。セクタは異なる媒体において異なるサイズを有してよい。アドレス翻訳テーブルは媒体を、セクタサイズのユニットとしてマッピングしてよい。一実施形態では、アドレス翻訳テーブルにアクセスするためのキー値は、媒体ＩＤ及び受信したセクタ番号の組み合わせであってよい。キーは、データのある行を別の行と区別するマッピングテーブル内のエンティティである。他の実施形態では、他のタイプのアドレス翻訳テーブルを利用してよい。
【００２３】
一実施形態では、アドレス翻訳テーブルは、媒体及びブロックオフセットを物理ポインタ値に対してマッピングしてよい。実施形態に応じて、物理ポインタ値は、ストレージデバイスがデバイス内の物理位置に対してマッピングする物理アドレス又は論理アドレスであってよい。一実施形態では、アドレス翻訳テーブルにアクセスするためにインデックスを利用してよい。このインデックスは、アドレス翻訳テーブル内のマッピングの位置を識別してよい。媒体ＩＤ及びセクタ番号から生成されたキー値を用いてインデックスを問い合わせてよく、また、キー値に適合するか又はそれ以外の様式で対応する１つ又は複数のエントリについてインデックスを検索してよい。次に適合エントリからの情報を用いて、受信した読み出し又は書き込み要求の標的であるストレージ位置を識別するマッピングを配置及び取得してよい。一実施形態では、インデックス内でのヒットにより、ストレージシステムのストレージデバイス内のページを識別する、対応する仮想ページＩＤが提供され、ページはキー値と、対応する物理ポインタ値との両方を記憶する。次にキー値を用いてこのページを検索して、物理ポインタ値を見つけることができる。
【００２４】
重複排除テーブルは、微粒度レベルでデータを重複排除するために使用される情報を含んでよい。重複排除テーブルに記憶された情報は、所定のデータ成分に関して計算された１つ又は複数のハッシュ値と、上記所定のデータ成分を保持するストレージデバイス１３５Ａ〜Ｎのうちの１つ内の物理位置に対する物理ポインタとの間のマッピングを含んでよい。更に重複排除テーブルには、上記所定のデータ成分の長さと、対応するエントリに関するステータス情報とを記憶してよい。なお、いくつかの実施形態では、物理ポインタ値と対応する物理ストレージ位置との間には１つ又は複数のレベルの間接参照が存在してよい。従ってこれらの実施形態では、物理ポインタを用いて、ストレージデバイス１３５Ａ〜Ｎのうちの所定のストレージデバイス内の別のマッピングテーブルにアクセスできる。
【００２５】
なお代替実施形態では、クライアントコンピュータ、ストレージコントローラ、ネットワーク、ストレージデバイス群、データストレージデバイスの個数及びタイプは、図１に示したものに限定されない。様々な時点において、１つ又は複数のクライアントがオフラインで動作できる。更に動作中、ユーザがシステム１００に対して接続、接続解除、再接続を行うのに従って、個々のクライアントコンピュータ接続タイプを変更してよい。更に本明細書に記載のシステム及び方法は、直接接続型ストレージシステム又はネットワーク接続型ストレージシステムに適用してよく、また本明細書に記載の方法の１つ又は複数の態様を実行するよう構成されたホストオペレーティングシステムを含んでよい。多数のこのような代替例が可能であり、考察の対象となる。
【００２６】
ネットワーク１２０は：無線接続；直接ローカルエリアネットワーク（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＬＡＮ）接続；インターネット、ルータ、ストレージエリアネットワーク、イーサネット（登録商標）等の広域ネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＷＡＮ）接続を含む多様な技術を利用してよい。ネットワーク１２０は、無線式であってもよい１つ又は複数のＬＡＮを備えてよい。ネットワーク１２０は更に、リモートダイレクトメモリアクセス（ｒｅｍｏｔｅ  ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ：ＲＤＭＡ）ハードウェア及び／若しくはソフトウェア、伝送制御プロトコル／インターネット・プロトコル（ｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ／ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ：ＴＣＰ／ＩＰ）ハードウェア及び／若しくはソフトウェア、ルータ、リピータ、スイッチ並びに／又はグリッド並びに／又はその他のものを含んでよい。ファイバチャネル、ファイバチャネルオーバイーサネット（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ：ＦＣｏＥ）、ｉＳＣＳＩ等のプロトコルをネットワーク１２０において使用してよい。ネットワーク１２０は、伝送制御プロトコル（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ：ＴＣＰ）及びインターネット・プロトコル（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ：ＩＰ）、即ちＴＣＰ／ＩＰ等の、インターネット用に使用される一連の通信プロトコルとインタフェース接続してよい。
【００２７】
クライアントコンピュータ１１５、１２５は、デスクトップパーソナルコンピュータ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ：ＰＣ）、サーバ、サーバファーム、ワークステーション、ラップトップ、ハンドヘルドコンピュータ、サーバ、パーソナルデジタルアシスタント（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ：ＰＤＡ）、スマートフォン等の、いずれの個数の据置型又は移動体コンピュータの代表例である。一般にクライアントコンピュータシステム１１５、１２５は、１つ又は複数のプロセッサコアを備える１つ又は複数のプロセッサを含む。各プロセッサコアは、事前に定義された汎用命令セットに従って命令を実行するための回路構成を含む。例えばｘ８６命令セットアーキテクチャを選択してよい。あるいはＡＲＭ（登録商標）、Ａｌｐｈａ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、ＳＰＡＲＣ（登録商標）又は他のいずれの汎用命令セットアーキテクチャを選択してよい。プロセッサコアは、データ及びコンピュータプログラム命令のためのキャッシュメモリサブシステムにアクセスしてよい。上記キャッシュサブシステムは、ランダムアクセスメモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＲＡＭ）及びストレージデバイスを備えるメモリ階層に接続してよい。
【００２８】
ここで図２を参照すると、媒体の有向非巡回グラフ（ＤＡＧ）２００を示すブロック図が示されている。また図２は、各ボリュームに関して、ストレージシステムによって使用されている間にボリュームがどの媒体にマッピングされるかを示す、ボリューム−媒体間マッピングテーブル２０５も示す。ボリュームはグラフ２００への考えられるポインタであり得る。
【００２９】
本明細書で使用される用語「媒体（ｍｅｄｉｕｍ）」は、データの論理グループ化として定義される。媒体は、データの論理グループ化を識別するための対応する識別子を有してよい。各媒体はまた、コンテンツ位置、重複排除エントリ及びその他の情報に対する論理ブロック番号のマッピングを含むか、又はこれに関連してよい。一実施形態では、媒体の識別子をストレージコントローラが使用してよいが、媒体の識別子はユーザ管理下でなくてよい。ユーザ（又はクライアント）は、ボリュームＩＤに付随するデータ要求を送信して、この要求がどのデータを標的とするかを特定してよく、ストレージコントローラはボリュームＩＤを媒体ＩＤに対してマッピングして、上記要求を処理する際に媒体ＩＤを使用してよい。
【００３０】
用語「媒体」を用語「ストレージ媒体（ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）」又は「コンピュータ可読ストレージ媒体（ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）」と混同してはならない。ストレージ媒体は、データを記憶するために利用される実際の物理デバイス（例えばＳＳＤ、ＨＤＤ）として定義される。コンピュータ可読ストレージ媒体（又は非一時的コンピュータ可読ストレージ媒体）は、プロセッサ又はその他のハードウェアデバイスが実行できるプログラム命令を記憶するよう構成された物理ストレージ媒体として定義される。本明細書に記載の方法及び／又はメカニズムを実装する様々なタイプのプログラム命令を、コンピュータ可読媒体上で搬送又は記憶してよい。プログラム命令を記憶するよう構成された多数のタイプの媒体利用手可能であり、これにはハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ：ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、他の様々な形態の揮発性又は不揮発性ストレージが含まれる。
【００３１】
また、用語「ボリューム−媒体間マッピングテーブル（ｖｏｌｕｍｅ  ｔｏ  ｍｅｄｉｕｍ  ｍａｐｐｉｎｇ  ｔａｂｌｅ）」は、単なる単一のテーブルではなく複数のテーブルを指してよいことにも留意されたい。同様に用語「媒体マッピングテーブル（ｍｅｄｉｕｍ  ｍａｐｐｉｎｇ  ｔａｂｌｅ）」も、単なる単一のテーブルではなく複数のテーブルを指してよい。更に、ボリューム−媒体間マッピングテーブル２０５は、ボリューム−媒体間マッピングテーブルの一例にすぎないことにも留意されたい。他のボリューム−媒体間マッピングテーブルは、異なる個数のボリュームのための異なる個数のエントリを有してよい。
【００３２】
各媒体を、３つの結合されたボックスとしてグラフ２００に示し、左のボックスは媒体ＩＤを示し、中央のボックスは下層の媒体を示し、右のボックスは媒体のステータス（ＲＯ：読み出し専用（ｒｅａｄ−ｏｎｌｙ））又は（ＲＷ：読み書き（ｒｅａｄ−ｗｒｉｔｅ））を示す。読み書き型媒体をアクティブ媒体と呼んでよく、読み出し専用媒体は既に生成されたスナップショットを表してよい。グラフ２００内では、媒体はその下層の媒体を指す。例えば媒体２０は媒体１２を指し、これによって媒体１２が媒体２０の下層の媒体であることを表す。また媒体１２は媒体１０を指し、媒体１０は媒体５を指し、媒体５は媒体１を指す。いくつかの媒体は、２つ以上の高次の媒体に対する下層の媒体となる。例えば３つの別個の媒体（１２、１７、１１）は媒体１０を指し、２つの別個の媒体（１８、１０）は媒体５を指し、２つの別個の媒体（６、５）は媒体１を指す。少なくとも１つの高次媒体に対する下層媒体となる媒体はそれぞれ、読み出し専用のステータスを有する。
【００３３】
グラフ２００の左下の媒体のセットは、線形セットの例である。グラフ２００に示すように、まず媒体３が生成され、続いてスナップショットが実行され、その結果媒体３は安定する（即ちこの時点以降、媒体３内の所定のブロックの探索の結果が常に同一の値を返すことになる）。媒体３を下層の媒体として用いて、媒体７が生成される。媒体３が安定した後に書かれるいずれのブロックは、媒体７内にあるものとして標識される。媒体７に対する探索は、媒体７内に値が見つかる場合は媒体７から値を返すが、媒体７内にブロックが見つからない場合は媒体３を探索することになる。その後媒体７のスナップショットを実行し、媒体７は安定となり、媒体１４が生成される。媒体１４内のブロックの探索により、媒体７、続いて媒体３を検査して、標的論理ブロックを見つける。最後に媒体１４のスナップショットを実行し、媒体１４は安定となり、媒体１５が生成される。グラフ２００のこの時点において媒体１４は、媒体１５へと向かうボリューム１０２への書き込みによって安定となる。
【００３４】
ボリューム−媒体間マッピングテーブル２０５は、ユーザ管理下のボリュームを媒体に対してマッピングする。各ボリュームは、アンカー媒体としても知られる単一の媒体に対してマッピングしてよい。このアンカー媒体は、他の全ての媒体と同様に、それ固有の探索を処理してよい。複数のボリュームが依存する媒体（例えば媒体１０）は、それ自体の複数のブロックを、これらブロックが依存するボリュームとは別個に追跡する。各媒体をブロックの範囲に分解してもよく、各範囲を媒体のＤＡＧ２００内で別個に処理してよい。
【００３５】
ここで図３を参照すると、媒体マッピングテーブル３００の一実施形態を示す。媒体マッピングテーブル３００のいずれの部分又は全体は、ストレージコントローラ１１０及び／又はストレージデバイス１３５Ａ〜Ｎのうちの１つ若しくは複数に記憶してよい。ボリューム識別子（ＩＤ）を使用してボリューム−媒体間マッピングテーブル２０５にアクセスし、このボリュームＩＤに対応する媒体ＩＤを決定してよい。次にこの媒体ＩＤを使用して媒体マッピングテーブル３００にアクセスしてよい。なおテーブル３００は媒体マッピングテーブルの単なる一例であり、他の実施形態では、異なる個数のエントリを有する異なる媒体マッピングテーブルを利用してよい。更に他の実施形態では、媒体マッピングテーブルは他の属性を含んでよく、図３に示したものとは異なる方法で整理されてよい。また、効率的な検索を提供するために、いずれの適切なデータ構造（例えばＢツリー、バイナリツリー、ハッシュテーブル等）を用いて、マッピングテーブル情報を記憶してよいことに留意されたい。これらのデータ構造全てが考察の対象となる。
【００３６】
テーブル３００の左列に示すように、媒体ＩＤによって各媒体を識別してよい。テーブル３００の各エントリに範囲属性も含んでよく、この範囲はデータブロックに関するものであってよい。データのブロックのサイズ（例えば４ＫＢ、８ＫＢ）は、実施形態に応じて変化し得る。媒体は複数の範囲に分解してよく、媒体の各範囲を、固有の属性及びマッピングを有する独立した媒体であるかのように処理してよい。例えば媒体ＩＤ２は２つの別個の範囲を有する。媒体ＩＤ２の範囲０〜９９は、テーブル３００内で媒体ＩＤ２の範囲１００〜９９９のためのエントリから離間したエントリを有する。
【００３７】
媒体ＩＤ２のこれらの範囲を共に下層媒体ＩＤ１に対してマッピングするが、同一のソース媒体の別個の範囲を異なる下層媒体に対してマッピングすることもできる。例えば媒体ＩＤ３５の別個の範囲を別個の下層媒体に対してマッピングする。例えば媒体ＩＤ３５の範囲０〜２９９を、オフセット４００で下層媒体ＩＤ１８に対してマッピングする。これは、媒体ＩＤ３５のブロック０〜２９９を媒体ＩＤ１８のブロック４００〜６９９に対してマッピングすることを示す。更に媒体ＩＤ３５の範囲３００〜４９９を、〜３００のオフセットで下層媒体ＩＤ３３に対してマッピングし、媒体ＩＤ３５の範囲５００〜８９９を、〜４００のオフセットで下層媒体ＩＤ５に対してマッピングする。これらのエントリは、媒体ＩＤ３５のブロック３００〜４９９が媒体ＩＤ３３のブロック０〜１９９に対してマッピングされ、媒体ＩＤ３５のブロック５００〜８９９が媒体ＩＤ５のブロック１００〜４９９に対してマッピングされることを示す。なお他の実施形態では、媒体は４つ以上の範囲に分解してよい。
【００３８】
テーブル３００の「状態」列は、ブロックのための探索をより効率的に実行できるようにする情報を記録する。状態「Ｑ」は、媒体が静止状態（ｑｕｉｅｓｃｅｎｔ）であることを示し、「Ｒ」は媒体が登録状態（ｒｅｇｉｓｔｅｒｅｄ）であることを示し、「Ｕ」は媒体が非マスク状態（ｕｎｍａｓｋｅｄ）であることを示す。静止状態では、テーブル３００内で特定された１つ又は２つの媒体だけに対して探索を実行する。登録状態では、探索を再帰的に実行する。非マスク状態は、探索を基底媒体において実行するべきか、又は探索を下層媒体においてのみ実行するべきかを決定する。いずれのエントリに関してテーブル３００には示されていないが、別の状態「Ｘ」を用いて、ソース媒体が非マッピング状態であることを特定してよい。この非マッピング状態は、ソース媒体が到達可能なデータを全く含まず、破棄できることを示す。この非マッピング状態はソース媒体の範囲に適用してよい。媒体全体が非マッピング状態である場合、媒体ＩＤをシーケンス無効化テーブルに入力して最終的に破棄してよい。
【００３９】
一実施形態では、媒体が生成されると、この媒体が下層媒体を有する場合はこの媒体は登録状態となり、又はこの媒体が既存の状態を有さない新規のボリュームである場合はこの媒体は静止状態となる。媒体に書き込みが行われると、この媒体の一部は非マスク状態となり得、媒体自体及び下層の媒体内にマッピングが存在する。これは、単一の範囲を複数の範囲のエントリに分割することによって実行でき、上記複数の範囲のエントリのうちのいくつかは、初期のマスク状態に保持され、その他は非マスク状態として記録される。
【００４０】
更にテーブル３００内の各エントリは、基底属性を含んでよく、これは媒体の基底を示し、これはこの場合ソース媒体自体を指す。各エントリはまた、オフセットフィールドを含んでよく、これは下層媒体に対してソース媒体にマッピングする際にブロックのアドレスに適用するべきオフセットを特定する。これにより媒体は、下層媒体の開始ブロックから下層媒体の頂部に構成されるだけではなく、下層媒体内の他の位置に対してマッピングできる。テーブル３００に示すように、媒体８は５００のオフセットを有し、これは媒体８のブロック０を下層媒体（媒体１）のブロック５００に対してマッピングすることを示す。従って媒体８による媒体１の探索は、５００のオフセットを、その要求の初期ブロック番号に付加することになる。「オフセット」の行により、媒体を複数の媒体で構成できる。例えば一実施形態では、媒体は「ゴールドマスター（ｇｏｌｄ  ｍａｓｔｅｒ）」オペレーティングシステム画像及びＶＭ（仮想マシン）毎のスクラッチスペースからなる。その他の柔軟なマッピングも可能であり、考察の対象となる。
【００４１】
各エントリは下層媒体属性も含み、これはソース媒体の下層媒体を示す。（媒体１と同様に）下層媒体がソース媒体を指す場合、これはソース媒体が下層媒体を有さず、全ての探索はソース媒体のみにおいて実行されることを示す。各エントリは安定属性も含み、「Ｙ」（ｙｅｓ：はい）は媒体が安定であること（又は読み取り専用であること）を示し、「Ｎ」（ｎｏ：いいえ）は媒体が読み書き可能であることを示す。安定である媒体では、媒体内の所定のブロックに対応するデータは変化しないが、このデータを生成するマッピングは変化し得る。例えば媒体２は安定であるが、媒体２のブロック５０は媒体２又は媒体１に記録してよく、媒体２及び媒体１はこの順に論理的に探索されてよいが、この探索は必要に応じて並列に実行してよい。一実施形態では、媒体がこれ自体以外のいずれの媒体によって下層媒体として使用される場合、この媒体は安定となる。
【００４２】
ここで図４を参照すると、テーブル４００の一実施形態のブロック図が示されている。様々な実施形態では、テーブル４００はアドレス翻訳テーブル、重複排除テーブル、オーバレイテーブル又はストレージコントローラが利用する他のいずれのタイプのテーブルであってよい。テーブル４００がアドレス翻訳テーブルとして利用される実施形態では、ストレージコントローラが受信した所定の読み出し／書き込み要求は、特定のボリューム、セクタ（又はブロック番号）及び長さを識別してよい。ボリューム−媒体間マッピングテーブルを用いて、ボリュームを媒体ＩＤに翻訳してよい。続いて媒体ＩＤ及びブロック番号を用いてインデックス４１０にアクセスし、特定の媒体ＩＤ及びブロック番号に対応するインデックスエントリの位置を検索してよい。インデックスエントリは、キーを含む少なくとも１つの組を記憶してよい。各インデックスエントリは、マッピングテーブル４２０における対応するエントリのレベルＩＤ及びページＩＤも含む。
【００４３】
レベルＩＤ、ページＩＤ並びに媒体ＩＤ及びブロック番号から生成されたキー値を用いて、対応するマッピングテーブルエントリの位置を検索してよく、ストレージ位置に対するポインタをこのエントリに返してよい。このポインタを用いて、ストレージシステムのストレージデバイスに記憶されたデータを識別するか又はその位置を検索してよい。ポインタ値に加えて、有効なインジケータ、データ経過年数、データサイズ等のステータス情報を、マッピングテーブル４２０のレベルＮに示したフィールド０〜フィールドＮに記憶してよい。なお様々な実施形態では、ストレージシステムは内部マッピング機構を有するストレージデバイス（例えばＳＳＤ）を含んでよい。このような実施形態では、マッピングテーブルエントリ内のポインタは、それ自体が実際の物理アドレスでなくてよい。寧ろポインタは、ストレージデバイスがデバイス内の物理位置に対してマッピングする論理アドレスであってよい。
【００４４】
この議論の目的に関して、インデックス４１０内のエントリにアクセスするために使用されるキー値は、データ要求に対応する媒体ＩＤ及びブロック番号である。しかしながら他の実施形態では、他のタイプのキー値を利用してよい。これらの実施形態では、キー生成器が媒体ＩＤ、ブロック番号及び／又は１つ若しくは複数のその他のリクエスタデータ入力からキーを生成してよく、このキーを用いてインデックス４１０にアクセスして対応するエントリの位置を検索できる。
【００４５】
一実施形態では、インデックス４１０をパーティション４１２ａ、４１２ｂ等の複数のパーティションに分割してよい。一実施形態では、パーティションのサイズは４キロバイト（ＫＢ）ページ〜２５６ＫＢであってよいが、他のサイズも可能であり、考察の対象となる。インデックス４１０の各エントリはキー値を記憶してよく、このキー値は媒体ＩＤ、ブロック番号及びその他の値に基づくものであってよい。この議論の目的に関して、各エントリのキー値を媒体ＩＤ及びブロック番号で表す。これは単に、媒体とインデックス４１０内のエントリとの間のマッピングを議論するための補助として示すものである。他の実施形態では、インデックス４１０のエントリのキー値は、これらが生成される方法に関して異なっていてよい。
【００４６】
様々な実施形態では、インデックス４１０の複数の部分をキャッシュするか、又はその他の方法でアクセスが比較的高速なメモリ内に記憶してよい。様々な実施形態では、全インデックス４１０をキャッシュしてよい。一次インデックスがその全体をキャッシュするには大きくなり過ぎているか、又はその他の点で所望のサイズより大きくなっているいくつかの実施形態では、二次インデックス、三次インデックス又はその他のインデックス部分をこのキャッシュにおいて使用して、そのサイズを削減してよい。以上に加えて様々な実施形態では、最新のヒットに対応するマッピングページを、少なくともある程度の期間に亘ってキャッシュしてよい。このようにして、時間的局所性を有するアクセスをより迅速に提供できる（即ち現在アクセスされている位置がそのマッピングをキャッシュして容易に利用できるようにする）。
【００４７】
いくつかの実施形態では、インデックス４１０は、一次インデックスにアクセスするためのキー値を発見するために使用できる二次インデックスであってよい。続いて一次インデックスを用いて、アドレス翻訳テーブル４００内で対応するエントリの位置を検索してよい。様々な実施形態において、利用するインデックスのレベルの数はいずれであってもよいことを理解されたい。更に実施形態に応じて、受信したデータ要求のアドレス翻訳を実行するために利用されるリダイレクションのレベルの数はいずれであってもよい。いくつかの実施形態では、対応するインデックスは、マッピングテーブル４２０の各レベル内に含まれてよく、上記マッピングテーブルは、そのレベルの一部であるマッピングに関するものである。このようなインデックスは、マッピングテーブルエントリの識別、及びレベル内におけるこれらマッピングテーブルエントリの記憶位置（例えばページの識別）を含んでよい。他の実施形態では、マッピングテーブルエントリに関連するインデックスは、論理的にそのレベル自体の一部ではない別個のエントリ又はエンティティであってよい。なお他の実施形態では、物理ストレージ位置に対して媒体ＩＤ及びブロック番号をマッピングするために、他のタイプのインデックス及びマッピングテーブルを利用してよい。
【００４８】
マッピングテーブル４２０は１つ又は複数のレベルを備えてよい。例えば様々な実施形態において、テーブル４２０は１６〜６４のレベルを備えてよいが、１つのマッピングテーブル内でサポートされるレベルの数をこれ以外とすることもでき、これも考察の対象となる。説明を容易にするために、レベル「Ｎ」、レベル「Ｎ−１」、レベル「Ｎ−２」と標識された３つのレベルを図示している。テーブル４２０内の各レベルは１つ又は複数のパーティションを含んでよい。一実施形態では、各パーティションは４キロバイト（ＫＢ）ページである。一実施形態では、マッピングテーブル４２０の各レベルに、対応するインデックス４１０が含まれてよい。この実施形態では、各レベル及び各対応するインデックス４１０は、ストレージデバイス内に、ランダムアクセス方式で物理的に記憶できる。
【００４９】
別の実施形態では、テーブル４００は重複排除テーブルであってよい。重複排除テーブルは、ストレージアクセス要求に関連するデータ成分から決定されたハッシュ値を含むキーを利用してよい。重複排除動作の初期ステップは、読み出し／書き込み要求、ゴミ集め動作、トリム動作といった他の動作と同時に実行してよい。所定の書き込み要求に関して、クライアントコンピュータシステムのうちの１つから送信されるデータは、バイトストリーム等のデータストリームであってよい。当業者には公知であるように、データストリームは固定長又は可変長チャンクのシーケンスに分割できる。チャンク生成アルゴリズムは、データストリームを、「チャンク」と呼ぶことができる複数の別個のデータ成分に分割できる。チャンクはデータのサブファイル連想ユニットであってよい。様々な実施形態では、テーブル又は他の構造を用いて、所定のファイルタイプ又はデータのタイプに関して使用される特定のチャンク生成アルゴリズムを決定してよい。ファイルのタイプは、そのファイル名拡張子、別個の識別情報又はデータ自体のコンテンツ等を参照することによって決定してよい。続いて得られたチャンクをストレージデバイスのうちの１つに記憶して、チャンクを共有できるようにしてよい。このようなチャンクは別個に記憶してよく、又は様々な様式でグループ化して記憶してよい。
【００５０】
様々な実施形態では、チャンクは、複数のチャンクからより大きなデータ成分を再構成できる（例えば記憶されているデータの１つ又は複数の小さなチャンクに基づいて、特定のファイルを再構成できる）データ構造によって表すことができる。対応するデータ構造は、関連する計算されたハッシュ値、ストレージデバイスのうちの１つ内におけるその位置に対する（物理及び／又は論理）ポインタ並びにその長さを含む、対応するチャンクを記録してよい。各データ成分に関して、重複排除アプリケーションを用いて対応するハッシュ値を計算してよい。例えばメッセージダイジェストアルゴリズム５（ＭＤ５）又はセキュアハッシュアルゴリズム（ＳＨＡ）等のハッシュ関数を用いて、対応するハッシュ値を計算してよい。受信した書き込み要求に対応する所定のデータ成分が既にストレージデバイスのうちの１つ又は複数に記憶されているかどうかを知るために、上記所定のデータ成分に関して計算されたハッシュ値のビット（又はハッシュ値のビットのサブセット）を、ストレージデバイスのうちの１つに記憶されたデータ成分のハッシュ値のビットと比較してよい。
【００５１】
更なる実施形態では、テーブル４００はオーバレイテーブルであってよい。１つ又は複数のオーバレイテーブルを用いて、問い合わせに応じて他のテーブルによって提供された、下層のマッピングテーブル内のキー値に対応する組を、修正又は削除してよい。１つ又は複数のオーバレイテーブルを用いて、フィルタリング条件を、マッピングテーブルへのアクセスに応答した、又は新規のレベルが生成された場合の平坦化動作中の使用に適用してよい。オーバレイテーブルに関するキーは、下層のマッピングテーブルに関するキーと適合する必要はない。例えばオーバレイテーブルは、特定の範囲のデータが削除されたか又はその他の様式でアクセス不可となっていること、及び上記範囲に関連する組に対応する問い合わせへの応答が無効であることの単一エントリの表明を含んでよい。別の例では、オーバレイテーブル内のエントリは、ストレージ位置が自由となっていること、及び上記ストレージ位置に関連するいずれの組が無効であり、これによってマッピングテーブルが使用するキーではなく探索の結果が無効化されることを示してよい。いくつかの実施形態では、オーバレイテーブルは下層のマッピングテーブルへの問い合わせに応答してフィールドを修正してよい。いくつかの実施形態では、ある範囲のキー値を用いて、同一の動作が適用される複数の値を効率的に識別してよい。このようにして、オーバレイテーブル内に「削除（ｅｌｉｄｅ）」エントリを生成することにより、マッピングテーブルを修正することなく、マッピングテーブルから組を効果的に「削除」できる。オーバレイテーブルを用いて、比較的効率的な様式でマッピングテーブルから脱落させることができる組を識別してよい。
【００５２】
図５に移ると、粗粒度重複排除動作の一実施形態のブロック図が示されている。一実施形態では、ストレージコントローラは複数の媒体内に記憶された同一のデータの領域を検索してよい。ストレージコントローラが、複数の媒体内に記憶された同一のデータの領域の位置を検出すると、ストレージコントローラは粗粒度重複排除動作を実行してよい。媒体マッピングテーブル５０５Ａは、粗粒度重複排除動作を実行する前の全媒体マッピングテーブルの一部分を表す。テーブル５０５Ａは媒体４３、４５に関するエントリを含み、これら媒体４３、４５は共に、媒体全体に関する単一のエントリを有し、それら自体をそれらの下層媒体として記録し、読み出し専用（即ち安定）ステータスを有する。
【００５３】
この議論の目的に関して、ストレージコントローラは、媒体４３の第１の範囲（ブロック３００〜４９９）内のデータが媒体４５の第２の範囲（ブロック１００〜２９９）内のデータと同一であることを検出していると考えられる。ストレージコントローラは、実施形態に応じて広範な技術のいずれを用いて、大きな範囲内で同一のデータを検出してよい。一実施形態では、ストレージコントローラは領域のバイト単位の比較を実行することによって同一のデータを検出してよい。場合によっては、領域がパターンブロック又はマッピングされていない（ゼロ）ブロックを含む場合、バイト単位の比較は、実際にデータを読み出すことを伴わなくてよい。別の実施形態では、ストレージコントローラは領域のハッシュ単位の比較を実行することによって同一のデータを検出してよい。更なる実施形態では、ストレージコントローラは、別個の媒体領域のマッピングが同一のブロックを指すことを確認してよい。例えばストレージコントローラは、媒体４３のブロック３００が媒体４５のブロック１００と同一の物理位置を指すことを検出してよい。従ってストレージコントローラは、これらのブロックが同一のデータを参照すると決定できる。一実施形態では、ストレージコントローラは、大きなボリューム領域内で同一のデータを検出するために、これら３つの技術全てを組み合わせて用いてよい。（これら３つの技術のいずれに基づく）３つの条件のうちのいずれか１つが、２つの別個の領域内の全てのブロックに関して真である場合、ストレージコントローラはこれらの領域が同一であると結論付けてよい。
【００５４】
両媒体内に記憶された同一のデータを検出した結果として、ストレージコントローラは粗粒度重複排除動作を開始して、同一領域のマッピングを統合してよい。なお、媒体４３の第１の範囲のデータ及び媒体４５の第２の範囲のデータは、ストレージコントローラが利用する通常の微粒度重複排除処理の一部として、既に微粒度レベルで重複排除されていてよい。
【００５５】
同一データの検出に応答して、媒体４３の第１の範囲を、媒体４５の第２の範囲の下層媒体として記録してよい。これはテーブル５０５Ｂに示されており、このテーブル５０５Ｂは媒体４５の第２の範囲に関する新規のエントリを含んでよい。このエントリには２００のオフセットも記録してよく、この２００のオフセットは、媒体４５の第２の範囲内のブロックを媒体４３に対してマッピングして、これらブロックを媒体４３の第１の領域と適切に整列させる際に適用してよい。また、第２の範囲の外のアドレス空間の他の領域に対応する、媒体４５に関する２つの新規のエントリも存在する。テーブル５０５Ａ内の媒体４５に関する過去のエントリからの属性を、テーブル５０５Ｂ内の媒体４５の第１及び第３の範囲に関する新規のエントリにコピーしてよい。媒体４５の第１の範囲（０〜９９）及び第３の範囲（３００〜Ｎに関するエントリは、媒体４５を下層媒体として記録してよい。既存のアドレス翻訳テーブルエントリを、媒体４５の第２の範囲に対する将来の探索に使用する代わりに、探索は、媒体４３の第１の範囲に関連するアドレス翻訳テーブルエントリを参照してよい。
【００５６】
いくつかの実施形態では、媒体マッピングテーブルのエントリの変更に加えて、媒体４５の第２の範囲に関連する既存のアドレス翻訳テーブルエントリを無効化するための指示を記憶してよい。後にマッピングのゴミ集めを実行する際、無効とされたこれらアドレス翻訳テーブルエントリを破棄してよい。
【００５７】
一実施形態では、粗粒度重複排除動作の実行後、媒体４５の第２の範囲に対する将来の探索により、ストレージコントローラは媒体マッピングテーブル５０５Ｂへの問い合わせによって媒体４５の第２の範囲の下層媒体を決定する。続いて、媒体４３の第１の範囲を、媒体４５の第２の範囲の下層媒体として識別した後、ストレージコントローラは、媒体４３に割り当てられたアドレス翻訳テーブルの探索を実行することになる。
【００５８】
ここで図６を参照すると、ボリューム領域を重複排除するための方法６００の一実施形態が示されている。上述のシステム１００に統合されている構成部品（例えばストレージコントローラ１１０）は一般に、方法６００に従って動作し得る。更にこの実施形態のステップを順番に示す。しかしながら別の実施形態では、いくつかのステップは図示したものと異なる順序で実行してよく、いくつかのステップは同時に実行してよく、いくつかのステップは他のステップと組み合わせてよく、またいくつかのステップが存在しなくてもよい。
【００５９】
ストレージコントローラは、２つの別個のボリューム領域が同一であることを検出してよい（ブロック６０５）。この議論の目的に関して、これら２つの同一の領域を、第１のボリューム領域及び第２のボリューム領域と呼んでよい。ストレージコントローラはこれら同一の領域を、上述の技術のいずれを用いて検出してよい。一実施形態では、第１のボリューム領域は第１のボリューム内にあってよく、第２のボリューム領域は第２のボリューム内にあってよい。しかしながら別の実施形態では、第１のボリューム領域及び第２のボリューム領域は同一のボリュームの一部であってよい。
【００６０】
次にストレージコントローラは、第１のボリューム領域及び第２のボリューム領域のアンカー媒体領域を決定してよい（ブロック６１０）。これらアンカー媒体領域をそれぞれ、第１の媒体の第１の領域及び第２の媒体の第２の領域と呼んでよい。例えば一実施形態では、第１の媒体は複数の別個の領域を有してよく、第１のボリューム領域は第１の媒体の単一の領域のみを指してよい。この議論の目的に関して、第１の媒体の第１の領域及び第２の媒体の第２の領域は安定であると考えられる。第１の媒体の第１の領域又は第２の媒体の第２の領域がアクティブ領域である場合、ストレージコントローラはこれらを安定とした後で、これらが同一のデータを含むことを決定してよい。
【００６１】
次にストレージコントローラは、第１の媒体の第１の領域が第２の媒体の第２の領域の下層となっていることのインジケータを記憶してよい（ブロック６１５）。一実施形態では、これは第２の媒体の第２の領域に関する媒体マッピングテーブル内に新規のエントリを生成することと、この新規のエントリにおいて、第１の媒体の第１の範囲が第２の媒体の第２の領域の下層となっていることを記録することとを必要とし得る。第２の媒体の（第２の範囲以外の）他の全ての範囲は、媒体マッピングテーブル内の第２の媒体に関する既存の１つ又は複数のエントリが示すように、現在の媒体間マッピングを保持してよい。
【００６２】
第１の範囲が第１の媒体のアドレス空間内に第１のオフセットで配置され、かつ第２の範囲が第２の媒体のアドレス空間内に第２のオフセットで配置される場合、第３のオフセットをこの新規のエントリ内に、第１のオフセットと第２のオフセットの差に等しい第３のオフセットを有して記憶してよい。なお第２のオフセットが第１のオフセットより大きい場合、第３のオフセットは負の値となる。ブロック６１５の後、ストレージコントローラは、第２の媒体の第２の範囲のアドレス翻訳（ＡＴ）マッピングを無効化してよく、及び／又は再利用してよい（ブロック６２０）。ストレージコントローラはアドレス翻訳マッピングを、実施形態に応じて即座に又は後の時点で破棄してよい。例えばこれらアドレス翻訳マッピングは、後の時点で統合動作が実行される際に破棄してよい。統合動作は、もはや到達できないアドレス翻訳マッピングのゴミ集めの実行を伴う。第２の媒体の他の範囲に関する、アドレス翻訳マッピングの残りの部分は、保持してよい。ブロック６２０の後、方法６００を終了してよい。
【００６３】
なお上述の実施形態はソフトウェアを備えてよい。このような実施形態では、本方法及び／又は機構を実装するプログラム命令を、コンピュータ可読媒体上で搬送又は記憶してよい。プログラム命令を記憶するよう構成された多数のタイプの媒体が利用可能であり、これにはハードディスク、フロッピーディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、他の様々な形態の揮発性又は不揮発性ストレージが含まれる。
【００６４】
様々な実施形態において、本明細書に記載の方法及び機構の１つ又は複数の部分は、クラウドコンピューティング環境の一部を形成してよい。このような実施形態では、１つ又は複数の様々なモデルに従って、必要に応じてインターネットを介してリソースを提供してよい。このようなモデルは、インフラストラクチャ・アズ・ア・サービス（Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＩａａＳ）、プラットフォーム・アズ・ア・サービス（Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＰａａＳ）、ソフトウェア・アズ・ア・サービス（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＳａａＳ）を含んでよい。ＩａａＳでは、コンピュータインフラストラクチャを必要に応じて提供する。このような場合、一般にサービスプロバイダがコンピュータ設備を所有し、動作させる。ＰａａＳモデルでは、サービスプロバイダが、開発者がソフトウェアによる解決法を開発するために使用するソフトウェアツール及びその下層設備を必要に応じて提供し、そのホストとなってよい。ＳａａＳは典型的には、サービスに応じてソフトウェアを認可するサービスプロバイダを含む。このサービスプロバイダはソフトウェアのホストとなってよく、又はソフトウェアを所定の期間だけカスタマに対して配備してよい。上述のモデルの多数の組み合わせが可能であり、考察の対象となる。
【００６５】
以上の実施形態についてかなり詳細に説明したが、上述の開示を完全に理解すれば、当業者には多数の変形例及び修正例が明らかとなるであろう。以下の請求項は、これらの変形例及び修正例の全てを包含するものと解釈されることを意図したものである。
【図１】
0006445458.tif 000002
【図２】
0006445458.tif 000003
【図３】
0006445458.tif 000004
【図４】
0006445458.tif 000005
【図５】
0006445458.tif 000006
【図６】
0006445458.tif 000007