(58)【調査した分野】(Int.Cl.,DB名)
前記ホスト側モジュールにおいて、前記ホストマシン上で実行中の前記クライアントから、暗号化データを含む特定のクランプからデータを読み出すための要求を受け取るステップと、
前記ホスト側モジュールが、前記暗号化データに関連する前記特定のクランプと前記メタデータとにアクセスすることによって、前記特定のクランプ内に前記暗号化データと共に記憶されている前記関連する暗号鍵インデックス値を特定するステップと、
前記ホスト側モジュールが、前記ストレージシステムによって維持されている前記暗号化テーブルに基づいて、前記特定された暗号鍵インデックス値に関連する暗号鍵を識別するステップと、
前記ホスト側モジュールが、前記識別された暗号鍵を用いて前記特定のクランプ内の前記暗号化データを復号することによって復号データを生成するステップと、
前記ホスト側モジュールが、前記復号データを前記クライアントに送信するステップと、
をさらに含む請求項5に記載の方法。
前記ホストマシンから分離した前記1又は2以上のストレージノードにおいて、前記1又は2以上のストレージノード上に記憶されているクランプ内のデータを再暗号化するための要求を受け取るステップと、
前記1又は2以上のストレージノードで実行中のタスクワーカが、前記1又は2以上のストレージノード上に記憶されている前記クランプを読み出すことによって、暗号化すべきクランプの組を識別するステップと、
前記タスクワーカが、前記クランプ内の関連するメタデータから、前記クランプの組内のデータを復号するために必要な前記暗号鍵を識別するために使用される識別子を表す1又は2以上の暗号鍵インデックス値の組を特定するステップと、
前記タスクワーカが、前記ストレージシステムによって維持されている前記暗号化テーブルに基づいて、前記特定された1又は2以上の暗号鍵インデックス値の組に関連する暗号鍵を識別するステップと、
前記タスクワーカが、前記識別された1又は2以上の暗号鍵の組を用いて前記暗号化データを復号することによって前記クランプの組から復号データを生成するステップと、
前記タスクワーカが、新たな暗号鍵を用いて前記復号データを暗号化することによって暗号化データを生成するステップと、
前記タスクワーカが、前記暗号化データをクランプの組にパッケージ化するステップと、
前記クランプの組を前記1又は2以上のストレージノードに記憶するステップと、
をさらに含む請求項5に記載の方法。
前記特定のデータに基づいて前記1又は2以上のフィンガープリントを生成するステップは、前記暗号化データに基づいて特定のフィンガープリントを生成することを含み、
前記キャッシュに格納されているクランプの前記クランプフィンガープリントは、暗号化されて1又は2以上のクランプにパッケージ化されたブロックに対して生成されたクランプフィンガープリントであり、
前記1又は2以上のクランプフィンガープリントを比較するステップは、特定のクランプフィンガープリントを、前記ブロックが暗号化されて前記1又は2以上の複数のクランプにパッケージ化された後に、前記ブロックに対して生成された前記クランプフィンガープリントと比較することを含む、請求項2に記載の方法。
ストレージシステムにおいてデータを暗号化するための命令を記憶する非一時的コンピュータ可読媒体であって、前記命令は、1又は2以上のプロセッサによって実行された時に、請求項1から9のいずれか1項に記載の方法の実行を引き起こす、
ことを特徴とする非一時的コンピュータ可読媒体。
1又は2以上のプロセッサと、メモリと、ストレージとを備えた1又は2以上のコンピュータ装置であって、請求項1から9のいずれか1項に記載の方法を実行するようにプログラムされる、
ことを特徴とするコンピュータ装置。
【発明を実施するための形態】
【0010】
以下の説明では、本発明を完全に理解できるようにするために、説明を目的として数多くの特定の詳細を記載する。しかしながら、これらの特定の詳細を伴わずに本発明を実施できることが明らかであろう。その他の場合、本発明を不必要に曖昧にしないために、周知の構造及び装置についてはブロック図形式で示す。
【0011】
全体的概要
本明細書では、ストレージシステムに記憶すべきデータに対してデータ暗号化及び復号を実行する技術について説明する。1つの実施形態によれば、ホストマシン上で実行中のクライアントアプリケーションが、ストレージシステムにデータを書き込むためのデータストレージ書き込み要求を生成することができる。ホストマシン上で実行中のホスト側モジュールが、この書き込み要求を受け取る。ホスト側モジュールは、書き込み要求に対応するデータのための、データを構成するデータブロックを識別するために使用される一意の識別子である1又は2以上のフィンガープリントを生成するように構成される。ホスト側モジュールは、データブロックに対応する1又は2以上のフィンガープリントを生成すると、暗号化技術を用いてデータブロックを暗号化することによって暗号化データを生成する。その後、この暗号化データは、ストレージシステム内のストレージノードに送信される。この暗号化データに対し、1又は2以上の生成されたフィンガープリントを用いて重複排除を実行することができる。
【0012】
分散型仮想アレイ
図1に示す本発明の一般的な実施形態に、DVAの2つの主要な物理的「側面」である、(1つを含む)いずれかの数のサーバなどのホスト100と、ホスト側から見れば単一の、ただし分散したストレージシステムを形成できるストレージノード310−1、310−2、...、310−N(まとめて「310」)を含むストレージプール300との間の関係を示す。ホスト100内のエンティティが書き込んだデータは、最初に(NVRAM330として示す)不揮発性メモリに記憶され、最終的にはノード内に位置する永続記憶装置340−1、...、340−N(まとめて「340」)に記憶される。
【0013】
読み出し及び書き込みエンティティは、(「VM」130−1、...、130−nとして別個に示す)仮想マシン130、又はユーザレベルアプリケーション140などのさらに一般的な非仮想化プロセスを含むあらゆるタイプのものとすることができる。ここでは、データの読み出し及び/又は書き込みを行う必要があるソフトウェアエンティティ及びハードウェアエンティティを「クライアント」と呼ぶ。
【0014】
各ホストは、1又は2以上のプロセッサ(CPU)111と、CPU上で実行できるデータ及び/又はコードの非永続的な揮発性の、及び/又は永続的な不揮発性の非一時的記憶を行ういくつかの装置112とを含むシステムハードウェア110を含む。従来、一般にメモリは高速で揮発性の固体装置を構成していたのに対し、一般にストレージは低速で不揮発性の機械的又は光学機械的装置を構成していたことから、「メモリ」と「ストレージ」との間には比較的明確な技術的区別があった。しかしながら、現代技術が大容量の永続ストレージに幅広く使用されるにつれ、この区別は次第に曖昧になってきている。例えば、多くの最新のサーバは、特に非連続的な記憶位置については、一般にIOPS(1秒当たりの入出力操作)の観点で測定したスループット及び速度を高めるために「サーバフラッシュ」などの様々な固体記憶装置(SSD)を使用する。相変化メモリ(PRAM)などの最先端技術では、この区別がさらに曖昧になっている。ここで説明する実施形態の実装には、特定のタイプのホスト側ストレージ技術又はメモリ技術は不要であり、全てのホストが同じストレージ技術を利用する必要もない。
【0015】
ハードウェア110は、インターネット、企業内ネットワークなどのいずれかの既知の公衆ネットワーク、専用ローカルネットワーク又は広域ネットワークとすることができる1又は2以上のネットワーク200を介してシステムの様々なコンポーネント間でデータを転送できるように、ネットワーク接続装置114などの他の従来の機構を含む。唯一の要件は、どのようなネットワークを使用するとしても、アクセスする必要があるストレージノード(以下を参照)に全てのクライアントがアクセスできることである。従って、「この」ネットワーク200は、異なるネットワーク間でデータを転送する必要がある場合にはあらゆる必要なスイッチング装置又はその他の通信装置を伴う、実装されたあらゆるネットワークの集合体であると解するべきである。
【0016】
各ホストは、例えば実装、オペレーティングシステム(OS)、デバイスドライバなどに応じて、従来のシステムソフトウェア115も含む。図示の構成では、ホスト100のうちの1つを、通常はシステムハードウェア110と(図示の実施形態では)少なくとも1つの仮想マシン(VM)130−1、...130−nとの間に何らかの形のハイパーバイザ120又は同様のインターフェイスレイヤを含む仮想化プラットフォームをサポートするものとして示す。周知のように、VMは、実際の物理的コンピュータシステムのソフトウェア抽象概念である。
【0017】
図1では、簡潔さのみを目的としてVMをホスト内に示しているが、ほとんどの実装では、仮想マシンはハイパーバイザ/ハードウェアホスト上で動作する「ゲスト」である。一部の仮想化システムには、ハイパーバイザ又はホストOSなどの基本ソフトウェア層へのインターフェイスとして「仮想マシンモニタ」が含まれる。VMware社のESXサーバ製品ファミリなどの多くのハイパーバイザは、ホストOSと相互作用する必要なく「ベアメタル」上で、すなわちシステムハードウェア110上で直接動作する。他の仮想化プラットフォームでは、ハイパーバイザが、ハイパーバイザからの呼び出し時にいくつかの動作をサポートして実行するホストOS上で、又はこのようなホストOSと同じレベルで動作することができる。ここで説明する本発明の様々な実施形態は、VMであろうと、(単複の)ハイパーバイザであろうと、又は他の仮想化レイヤであろうと、いずれかの特定の仮想化アーキテクチャに依存しない。実際のところ、VMは全く前提としておらず、むしろ想定されるのは、ソフトウェアエンティティ及びハードウェアエンティティ(「クライアント」)からのデータストレージ読み出し/書き込み要求を処理する何らかのシステムソフトウェア層である。従って、「ホスト」は、後述する分散ストレージ構成に対してデータの書き込み及び/又は読み出しを行いたいと望むことができるプロセス(VMはその特殊な例である)が実行されるいずれかのプラットフォームである。
【0018】
プール300内の個別のユニットとして示す様々なストレージノード310は、異なる物理サーバとすることができるが、アドレス指定のために単一の論理境界に含まれていると考えることができる。しかしながら、アドレス指定可能なストレージプールの論理的概念境界は、図示の物理ストレージノード310−1、310−2、...、310−Nの組に留まらないストレージコンポーネント及びプロセスを含むこともできる。
【0019】
所望のDVA機能に応じて、ノード310のいくつかの分散機能及び制御機能を操作してノード310に共通する管理データ及びその他のデータなどを維持するプールマネージャ350を含めることもできる。このようなプールマネージャは、1又は2以上のストレージノード内、1又は2以上のホスト内、又は同じネットワークに接続された別個のコンピューティングシステム内で動作することができる。プールマネージャは、プールに記憶されている(仮想ディスクなどの)ファイルのファイル名空間の管理、クラスタ管理、及び他のノード管理機能などのための他の管理コンポーネントを含むこともできるが、これらは独立エンティティとして実装することもできる。
【0020】
ストレージノードを実装するための多くの現在利用可能な考えられる選択肢の例のうちの2つとして、複数のディスクコントローラを含むXyratexシャーシ、或いは集約的入力/出力タスクのための低電力サーバアーキテクチャである単一ディスク「FAWN」(Fast Array of Wimpy Nodes)を挙げることができる。より一般的には、ノードは、いずれかの形態のバス又はネットワーク接続を介して少なくとも1つのディスクと通信するいずれかの形態のコンピュータを用いて実装することができる。実際には、ノード自体を、ストレージプールにデータを書き込むエンティティとすることもできる。
【0021】
各ノードは、1又は2以上のストレージコントローラ320−1、320−2、...、320−N(まとめて320)を含み、これらの各々は、1又は2以上のディスク、フラッシュ又はその他のSSDデバイス、又は(複数の物理装置を含む)永続記憶装置340を含むその他のデバイスを制御する従来の処理回路を含む。コントローラは、ネットワーク200に接続するために必要な回路も含む。いくつかの実施形態では、単一の複合モジュールにおいてコントローラを記憶装置と一体化することもできる。ホスト100と同様に、ストレージプール300のノード内で使用される様々なソフトウェアコンポーネントは、プール内の各ハードウェアプラットフォーム上の(単複の)プロセッサ上で実行できるようにいずれかの従来の方法でロード及び/又は記憶され、これらの媒体及びプロセッサは、簡潔にするために図には別個に示していないが、当業者であれば当然ながらこれらの存在を理解するであろう。これまでに説明したシステムコンポーネントは、多くの先行技術のシステムにも見られるものである。
【0022】
好ましい実施形態では、コントローラ320のうちの少なくとも1つが、新たに書き込まれたデータを非常に低いレイテンシで受け取って永続的に記憶する何らかの不揮発性メモリ330(NVRAM−
図2)も含み、又はこのメモリにアクセスすることができる。いくつかのシステムでは、NVRAMが、PCIeスロット内の特殊なカード上に存在することができる。いくつかの実装では、コントローラがバッテリバックアップを有することができ、停電時には、コントローラがシステムメモリの一部をフラッシュドライブにコピーするのに十分な時間を有する。この場合、NVRAM330は、別個の物理コンポーネントである必要はなく、代わりに他の標準的な目的でコントローラ内に存在する汎用RAMの論理部分とすることができる。いくつかのシステムでは、NVRAMを単に低レイテンシのSSDとすることができる。本発明の実施形態の全ての実装においてノードがディスクとNVRAMの両方を有する必要はなく、むしろいずれかの所与のノードを、これらの2つのタイプの永続記憶装置の一方のみを有し、又は少なくとも一方にアクセスできるように構成することができる。従って、
図1に示すように、1又は2以上のノード(例えば、ノード310−1)が永続記憶装置と不揮発性メモリの両方を有し、1又は2以上の他のノード(例えば、ノード310−2)が永続記憶装置を含まず、さらに他の(単複の)ノードが不揮発性メモリコンポーネント330を全く有さないようにシステムを実装することができる。また、やはり
図1のノード310−Nに示すように、1又は2以上のノードが複数の永続記憶装置(340−N)を有することもできる。さらに、いくつかの実施形態では、NVRAMがホスト内に存在することもできる。
【0023】
好ましい実施形態では、ホストが、ネットワークを介して永続記憶装置にではなくストレージノード又はホスト内のNVRAMに特別にデータを書き込むとともに、このNVRAMからデータを削除するコマンドを与えることもできる。この点は、永続記憶装置に向かっているデータにとってNVRAMが透過的なバッファである従来のストレージシステムの構成とは大きく異なる。
【0024】
上述したように、2つの主なストレージフィロソフィは、トレードオフ領域のほぼ両極端に収まる。ハイパーコンバージドシステムでは、実質的に全ての記憶負荷及び計算負荷が相互依存ホスト内に集中するのに対し、他のシステムでは、計算負荷のほとんどがリモートストレージユニット自体に置かれて、ホストが互いに直接的に依存しない。本発明の実施形態が採用する異なる方法では、通常は大きなホストの計算リソースが多くのストレージ関連機能のために、ただしホスト間の顕著な通信及び調整を必要としない形で使用され、メインストレージ能力が主にリモートノードに留まり、あらゆるホストが別のホストを介さずにリモートノードにアクセスすることができる。
【0025】
この目的のために、ホスト及びノードは、システムソフトウェアレベルにおけるDVAh405モジュールと、ノードにおけるDVAn425というそれぞれのDVAコンポーネントを含む。DVAh405は、
図1に重ね合わせによって示すように、システムソフトウェア115の一部として、仮想化プラットフォームの(ハイパーバイザ120などの)制御ソフトウェアの一部として、又はこれらの両方の協働コンポーネントとして実装することができる。選択肢としては、DVAhコンポーネントをシステムソフトウェア115内又はハイパーバイザ120内のドライバとして構成し、必要に応じてホストオペレーティングシステム(システムソフトウェア)に呼び掛けることが挙げられる。DVAh405コンポーネントは、異なるユーザレベルプロセス又はシステムレベルプロセス内に、或いは「ヘルパー」VM内に構成することもできる。一般に、DVAh及びDVAnは、その構成に関わらず、非一時的ストレージに記憶されメモリにロードされてホストCPU111によって実行されるプロセッサ実行可能コードの対応部分として実装される。
【0026】
同様に、ノード内のDVAn425コンポーネントは、それぞれのストレージコントローラ320上で実行されるソフトウェアとして、又はストレージコントローラから分離しているがストレージコントローラと協働するソフトウェアモジュールとして実装することもでき、非一時的ストレージに記憶されメモリにロードされてノード310内の(単複の)プロセッサによって実行されるプロセッサ実行可能コードの対応部分としても実装される。
【0027】
ある実施形態では、ストレージコントローラ320が、ホスト上に存在するDVAh405に暗号鍵を配布することによってデータ暗号化を管理する。安全性を維持するために、ホストによって使用される暗号鍵は定期的に循環させることができる。ストレージコントローラ320は、異なるホストが異なる時点でデータ暗号化のために使用できる複数の暗号鍵を含む暗号化テーブルを維持する。ある実施形態では、この暗号化テーブルが、暗号鍵値と、暗号鍵値を識別するために使用される暗号化インデックス値とを指定する列を含む。ストレージコントローラ320は、特定のホスト上のDVAh405に暗号化値を送信する際に、暗号鍵値と暗号化インデックス値とを送信する。暗号化テーブルは、暗号鍵に関連する暗号化アルゴリズムを指定する列を含むこともできる。ストレージコントローラ320は、暗号化テーブル内に暗号化アルゴリズムを記憶することによって異なるタイプの暗号化アルゴリズムをサポートすることができ、暗号鍵値と、暗号化アルゴリズムタイプと、暗号化インデックス値とを単純にDVAh405に送信することによって、データの暗号化に使用される暗号化アルゴリズムのタイプの変更を可能にすることができる。ある実施形態では、DVAh405内の1又は2以上のモジュールが、ストレージコントローラ320から暗号鍵値を受け取ることによってデータの暗号化を管理するように構成される。
【0028】
少なくとも1つのホストには、好ましくは(単複の)メモリ/ストレージコンポーネント112の一部としてキャッシュ113を含めることが好ましい。キャッシュは、1又は2以上のフラッシュメモリデバイス、相変化ランダムアクセスメモリ(PRAM)、メインシステムメモリの一部などを使用することなどのいずれかの従来の十分に高速な技術を用いて実装することができる。キャッシュは、個別にパッケージ化された固体ディスク(SSD)、サーバ内のバスにプラグ接続された回路カード、サーバマザーボード上のモジュールなどとして実装することもできる。
【0029】
図2は、
図1に示す主要システムコンポーネントの簡略表現であるが、DVAモジュールの様々な任意のサブコンポーネントのさらなる詳細を含む。1つのホストと1つのノードしか示していないが、他のホスト/ノードにも同様のサブコンポーネントを含めることができる。なお、全てのホスト又はノードが
図2に示すものと同じDVAサブコンポーネントを含む必要はなく、いずれかの所与の実装ニーズに応じて、図示のサブコンポーネントのうちのいずれかの数(1つ〜全部)をいずれかの所与のホストにあらゆる所望の組み合わせで含めることができる。従って、
図2に示すDVAサブコンポーネントの組は、例示及び説明を目的とするものにすぎない。さらに、
図2には、様々なサブコンポーネントを別個のものとして示しているが、これは例示及び説明を目的とするものにすぎず、これらの一部又は全部を単一の実行可能コード部分に組み合わせることもできる。
【0030】
DVAサブコンポーネント及びその機能は、バックグラウンドストレージ管理機能、データ変換機能及び/又は以下で概説するその他の機能を含む様々なストレージ処理機能の一部又は全部を実行する。なお、従来のストレージシステムでは、通常、これらの機能はストレージコントローラ内で実行され、ホストでは実行されない。DVAhサブコンポーネントは、以下を優先的に含む。
【0031】
既知の技術を用いてキャッシュ113に対する読み出し及び書き込みを操作するキャッシュマネージャ513。1つの実施形態では、キャッシュが、ブロックのフィンガープリントに基づいてキャッシュ内のブロックを発見できるようにフィンガープリント化されたデータブロックを含む。
【0032】
ホスト上のVM(或いは仮想化された又はされていない他のプロセス)からデータを受け取り、プール300に記憶できるように設計されたいずれかのフォーマットにデータを処理するファイルマネージャコンポーネント530。ファイルマネージャコンポーネント530は、データを読み出すための要求を受け取り、キャッシュ又はプールからデータを検索して処理し、元々記憶されていたフォーマットに戻して要求データを返送する。ファイルマネージャは、データのキャッシュ、処理、記憶又は検索を行うのに役立つ他のコンポーネントを呼び出すこともできる。
【0033】
ファイルマネージャ530は、ファイルオフセットからプール300に記憶されている対応するデータ項目への参照にマップを更新するマッピングモジュール524を呼び出すことができる。いくつかの実施形態では、このデータ項目参照が、データ項目を含むブロックのフィンガープリントを含む。いくつかの実施形態では、ホストがフィンガープリントを計算する。いくつかの実施形態では、データ項目参照が、データ項目のロケータを含む。ファイルマネージャは、ファイル内の何らかのオフセットのための読み出し要求を満たすために、マッピングモジュール524を呼び出して、ファイル内のそのオフセットについて記憶されているデータ項目への参照を取得する。その後、ファイルマネージャは、この参照を用いてキャッシュからデータ項目を検索し、或いはそこにデータ項目が存在しない場合には、プールからデータ項目を検索することができる。
【0034】
周知のように、仮想マシンのストレージシステムも仮想化される。従って、VM上で実行中のプロセスは、物理ストレージであると「思っている」が実際には「仮想ディスク」(vDisk)内の仮想アドレスであるものをアドレス指定した後に、対応するアドレスマップを用いて1又は2以上のレベルのアドレスリダイレクトを行って、最終的に物理空間内のアドレスに至る。分散ストレージシステムの文脈では、VMの読み出し及び書き込みが、最終的にプール300内の1つの(又は、例えばデータがミラーリングされている場合には複数の)物理記憶装置内の対応するアドレスにマッピングされる。
【0035】
好ましくは、圧縮、暗号化、データの完全性を保証するためのチェックサム、抹消符号化されたストライプへの受信データの圧縮、例えばRAIDストライプの一部としての誤り訂正符号(ECC)値の計算、及び/又はフィンガープリント、すなわち受信データブロックの一意の識別情報の計算などの、既知のデータ変換機能の一部又は全部を実行するデータ処理コンポーネントである処理エンジン520が含まれる。考えられるフィンガープリント技術の1つの例に、いずれかのSHA法(例えば、SHA−1)などを使用するハッシュがある。選択したフィンガープリント法に十分に衝突耐性がある(すなわち、2つの異なる入力が同じフィンガープリント出力を生じる確率が十分に低い)と仮定すれば、同じフィンガープリントを有する異なるデータブロックを、同じコンテンツを有するもの、従って重複するものと推測することができる。
【0036】
1つの実施形態では、到着データがフィンガープリント化され、到着ブロックのフィンガープリントをキャッシュ113内に、すなわちホスト100内に記憶されているブロックのフィンガープリントと比較することによって重複排除されることにより、プール300に記憶されているデータを分析して重複排除する必要性が避けられる。この構成では、通常はさらに強力なホストにおいてこれらの計算集約型タスクを実行できるだけでなく、ホストが最初にリモートストレージノード310からフィンガープリントを検索する必要があった場合に被ったはずの大部分のレイテンシも避けられる。
【0037】
フィンガープリント化されたブロックのキャッシュは、読み出し要求に応答してプールからデータブロックをフェッチするレイテンシを避けることもできる。2つの異なるファイルの各々が、同じコンテンツ、従って同じフィンガープリントを有するブロックを含むこともある。この重複ブロックは、1つのファイルの読み出し要求又は書き込み要求を満たすようにキャッシュ113に挿入しておくことができ、その後の別のファイル内の重複ブロックの読み出し要求は、プールからブロックをフェッチするレイテンシを伴うことなくキャッシュから満たすことができる。
【0038】
フィンガープリント化又はチェックサムを用いてデータの完全性を保証し、不完全な書き込みを検出することもできる。例えば、バッファデータについてフィンガープリントを計算することができる。潜在的なホスト障害及び不完全な書き込みのいずれかの兆候がある場合には、現在のデータのフィンガープリントをバッファデータのフィンガープリントと比較することができ、値が同じでなければ、システムは、バッファデータと記憶対象のデータとが同一でないので書き込みが不完全であったと分かる。
【0039】
ログ構造ファイルシステムを使用するDVAには、実施形態によってはコピーフォワードすべきデータを識別し、実施形態によってはこのようなデータを新たなストライプにコピーすることを含む、従来のガベージコレクション機能を実行するガベージコレクションモジュール522を含めることができる。
【0040】
ストライプを用いてデータを記憶するシステムには、ストライプマネージャ523を含めることができる。ストライプマネージャは、設計者が選択して実装するどのようなマッピングスキーム又は割り当てスキームにも従って複数のストレージノードにわたって分配したストライプに追加するECC値を計算するECCエンジン532を使用し、又は含めることができる。
【0041】
ホストには、(例えば、ECC情報から失われたRAIDストライプ要素の)データ再構成、データリバランシング又はデータスクラビングなどの機能を実行してデータの完全性を保証するモジュール526を含めることもできる。このモジュール、或いは1又は2以上の他のホストモジュールは、ホストのフラッシュキャッシュ内にデータをプリフェッチし、データクランプを形成してその細粒度で重複排除を行い、その後にこのようなクランプをリパックし、ホストフラッシュ障害を処理し、ホスト上のvDiskマップを更新することなどの動作を実行することもできる。
【0042】
DVAnサブコンポーネントは、以下を含むことができる。
【0043】
フィンガープリントからデータブロックロケータ又はその他の識別子へのマッピングを行うフィンガープリントインデックス521。ホストは、フィンガープリント化されたデータブロックをストライプに記憶してストライプをプールに書き込む際に、フィンガープリントと対応するデータブロックロケータとをフィンガープリントインデックスに伝える。ホストは、フィンガープリント化されたブロックをプールから読み出す必要がある時には、まずインデックスにブロックロケータを要求した後にプールからブロックを読み出す。インデックス521は、ホスト内に実装することもできるが、インデックスのサイズは記憶容量に比例し、一般的にはインデックスのためのメモリをその対応するストレージユニットとバンドルすることが最も効率的であると思われるので、コントローラ320に実装されることが好ましい。
【0044】
最近書き込まれたデータ及びその他のイベントをホスト上のロギングモジュール525から受け取ってこれらのデータを不揮発性の低レイテンシNVRAMモジュール330に記憶するログ325。
図2には、NVRAMモジュール330がノード310の内部に存在するように示しているが、これは1つの実装例にすぎない。他の可能性としては、NVRAMモジュール330を異なる専用ノード内又は他のいずれかの場所に配置することが挙げられる。最近書き込まれたデータをNVRAMにログとして又は別様に記憶することにより、ディスクドライブなどの高レイテンシ装置340に書き込むレイテンシを伴うことなく、書き込みを「安全」なものとして承認することができる。ログ325を含むホスト外にこのようなデータを記憶することにより、記憶装置340のうちの1つの永続的な位置にデータを記憶する前にホストに障害が生じた場合に、(ストレージノードのうちの1つ、障害が生じていないホストのうちの1つ、又は最初にデータを受け取ったホスト以外の他のいずれかのエンティティなどの)別のエンティティが不揮発性デバイス330からデータを読み出し、再処理して記憶装置340のうちの1つに記憶することができる。これは、現在障害が生じているホストを介してしかアクセスできないホスト内部のキャッシュ113に唯一のデータコピーが記憶されていた場合には不可能である。
【0045】
NVRAMモジュール330を含み、LOG325などのインターフェイスを介してこれをホストに公開するもう1つの利点は、ホストがストレージノード上のNVRAMにデータを書き込むことによってデータを「安全」にして素早い承認を可能にし、その後、例えばストライプを形成するのに十分な量のデータがバッチ処理された後などに、場合によっては遅れたさらなる記憶処理のために自機の計算リソースを利用できる点である。いくつかの実施形態では、ホストによるさらなる記憶処理が行われない限り、NVRAMに書き込まれたデータの一部が決して永続記憶装置に書き込まれないようにすることができる。いくつかの実施形態では、複数のNVRAMデバイスにデータを書き込んで、これらのNVRAMデバイスのうちの1つ、又はその接続先のコントローラの障害から保護することができる。ホスト自体が複数のNVRAMデバイスに書き込みを行うことも、或いはコントローラが、ホストの単一の書き込みを同じノード又は異なるノードにおける複数のNVRAMデバイスに、又は他の複数のコントローラとこれらのNVRAMデバイスとにミラーリングすることもできる。
【0046】
一例として、VMが少なくとも1つの仮想化ディスクvDisk又はファイルにデータの書き込みを望んでいると仮定する。VMがゲストであるホストに障害が生じた場合には、新たに書き込まれたデータのコピーが、何らかのストレージノード上のログ又はNVRAMに残る。書き込みデータは、場合によっては書き込みのログデータを保持していなかった1又は2以上のストレージノードを含むプールにデータが書き込まれる前に、(例えば、RAID様のシステムでは)フルストライプなどの何らかの最小記憶単位を満たすのに十分なデータが存在するまでファイルマネージャにバッファ処理し、又はVMホストのキャッシュ113に記憶しておくこともできる。新たな書き込みデータを、後でvDisk内の同じ場所に上書きするための時間を与えるようにさらに長い期間にわたってVMホスト上にバッファ処理することにより、ストライプ内の上書きデータを書き出す必要性を排除することもできる。DVAhコンポーネントの一部、又はオペレーティングシステム内などにおける他の何らかのホストエンティティとしてのホストは、少なくとも1つの抹消符号化ブロックを書き込み単位について計算し、これをストレージノードに書き込むこともできる。
【0047】
動作がREAD(読み出し)である場合には、キャッシュ113内で所望のデータを検索することができる。データがキャッシュされている場合には、このデータをキャッシュから読み出してVMなどの要求元プロセスに戻すことができる。データがキャッシュされていない場合には、(いずれかの中間アドレスマップを用いて)ストレージノードから直接データを読み出して要求元プロセスに戻すことができる。READデータをキャッシュに書き込むこともできる。
【0048】
管理及び計算負荷をホストに集中させることにより、ストレージノードを比較的単純かつ安価に保ってストレージ側の専用バックプレーン及びファイバーチャネル接続を不要にし、さらにはストレージ側全体が標準的なネットワーク接続を介してホストと直接通信できるようにすることができる。さらに、ホストがプールとの間で互いにまれにしか通信しない場合には、1つのホストが別のホスト上のノイジーネイバー(noisy neighbor)に煩わされることがない。最後に、ホストは、大きなキャッシュを含む場合にはプール内のノードにもまれに接触すればよく、これによってノイジーネイバー問題がさらに抑えられる。ホストは、VM及びVM内で実行中のアプリケーションにデータを供給する権限を有し、従ってシステム内の他の場所の性能問題に影響されにくい。
【0049】
なお、本明細書に開示する様々な機能又はプロセスは、様々な不揮発性コンピュータ可読媒体に具体化されるデータ及び/又は命令として説明することができ、DVAシステムの実施形態を実装したいと望む人々にコンピュータプログラム製品として提供することができる。
【0050】
図3に、書き込み要求を処理する1つの実装を示す。書き込み要求が受け取られると、この要求がノード上のNVRAMモジュール330にロギングされる。書き込みのロギングは、書き込み中のファイルの指示とファイル内のオフセットとを含む。書き込みデータ自体は書き込みバッファに書き込まれ、要求が承認される。書き込みバッファが処理を引き起こすほど十分に、例えばブロックを形成するほど十分に満杯でなければ、処理はさらなる書き込み要求の受け取りに戻り、満杯であれば、書き込まれたデータをブロックに形成して(データセット全体に1つのフィンガープリントを使用するか、それともブロック毎に別個のフィンガープリントを使用するかに応じて)1又は2以上のフィンガープリントを計算することができる。ブロックデータは、フィンガープリントの計算前、計算後又は計算と同時に、圧縮、暗号化などによって処理することもできる。ホストキャッシュ内に既に所与のブロックが存在する場合(これはフィンガープリントの比較によって判断することができる)には、ブロックへの参照でファイルマップを更新し、処理はさらなる書き込みの受け取りに戻ることができる。ホストキャッシュ又はグローバルフィンガープリントインデックス521内でブロックのフィンガープリントが見つからない場合には、このブロックを現在構築中のストライプに追加する。ストライプが未だ不完全である場合、システムは、さらなる書き込み要求の受け取りに戻ることができる。現在のストライプが完全である場合、このストライプのECCストライプ要素を計算し、配布して記憶することができる。その後、ストライプ内のブロックのフィンガープリントをグローバルフィンガープリントインデックス521に追加する。この時、ブロックをキャッシュにも追加し、その後にファイルマップを更新して、ストライプに記憶されたブロックが参照されるようにすることもできる。この時点で、ホストに障害が生じても書き込みデータは安全であり、従ってもはやNVRAM内の一時的なデータコピーは不要である。従って、ホストは、例えばロギングモジュール525を使用して、データを切り捨ててNVRAMから削除できる旨をログ325に伝えることができる。なお、NVRAMに一時的に記憶されているデータをコントローラ自体がさらに永続的な位置に書き換える必要はない。最後に、処理は、さらなる書き込みの受け取りに戻る。他の実施形態では、DVAhコンポーネントが、フィンガープリントを計算し、そのフィンガープリントがホストキャッシュ及び/又はグローバルフィンガープリントインデックス内に存在するかをチェックし、対応するファイル及びファイル内のオフセットについて、データ自体ではなくそれまでに記憶されているデータへの新たな参照のみをリモートNVRAMにロギングした後で書き込みを承認する。
【0051】
図8に、書き込み要求を処理する別の実装を示す。書き込み要求が受け取られると、この要求がノード上のNVRAMモジュール330にロギングされて要求が承認される。書き込みのロギングは、書き込み中のファイルの指示とファイル内のオフセットとのロギングを含む。書き込みデータがデータブロックを完全にカバーしていない場合には、ブロックの残り部分をホストキャッシュ及び/又はプールから読み出し、書き込みデータと融合して書き込みブロックを形成することができる。ブロックは、NVRAMモジュール330にロギングする前に、圧縮、暗号化などによって処理することができる。未処理のブロックについてもフィンガープリントを計算して、重複排除を可能にすることができる。ホストキャッシュ内に既に所与のブロックが存在する場合(これはフィンガープリントの比較によって判断することができる)には、ブロックへの参照でファイルマップを更新し、処理はさらなる書き込みの受け取りに戻ることができる。ホストキャッシュ又はグローバルフィンガープリントインデックス521内でブロックのフィンガープリントが見つからない場合には、このブロックを現在構築中のストライプに追加する。ストライプが未だ不完全である場合、システムは、さらなる書き込み要求の受け取りに戻ることができる。現在のストライプが完全である場合、このストライプのECCストライプ要素を計算し、配布して記憶することができる。その後、ストライプ内のブロックのフィンガープリントをグローバルフィンガープリントインデックス521に追加する。この時、ブロックをキャッシュにも追加し、その後にファイルマップを更新して、ストライプに記憶されたブロックが参照されるようにすることもできる。この時点で、ホストに障害が生じても書き込みデータは安全であり、従ってもはやNVRAM内の一時的なデータコピーは不要である。従って、ホストは、例えばロギングモジュール525を使用して、データを切り捨ててNVRAMから削除できる旨をログ325に伝えることができる。最後に、処理は、さらなる書き込みの受け取りに戻る。
【0052】
図4に、読み出し要求を処理する1つの実装を示す。読み出し要求が受け取られ、要求されたオフセットをもたらすデータを含むブロックへの参照をファイルマップモジュールから検索する。参照されるブロックがキャッシュ113内に存在する場合には、このブロックを検索し、データを戻して読み出し要求を満たすことができる。ブロックがキャッシュ内に存在しない場合には、ブロックをプールから検索しなければならない。この検索は、フィンガープリントインデックスからブロックロケータを検索することによって行うことができる。ブロックが検索されると、そのブロックをキャッシュに追加して、要求されたデータを戻すことができる。
【0053】
データ暗号化
ある実施形態では、ホスト側モジュールを、NVRAM及び/又はホストキャッシュ及び/又はストレージプール300にデータを記憶する前にデータを暗号化するように構成することができる。
図5に、データを記憶するための書き込み要求を受け取り、データを記憶する前にホストにおいてデータを暗号化する実施形態例を示す。
【0054】
ステップ550において、DVAh405が、ストレージプール300にデータを記憶するための書き込み要求を受け取る。
図2を参照して分かるように、DVAh405内のファイルマネージャコンポーネント530は、VM130又はユーザレベルアプリケーション140から書き込み要求を受け取るように構成される。ある実施形態では、VM130が、ストレージプール300にデータを書き込むための書き込み要求をDVAh405に送信する。例えば、VM130は、ストレージプール300に1MBのファイルを書き込む要求をDVAh405に送信する。
【0055】
ステップ555において、受け取ったデータを1又は2以上のデータブロックに分割する。ある実施形態では、ファイルマネージャコンポーネント530が、受け取ったデータをCBlockと呼ばれる1又は2以上のデータブロックに分割する。ファイルマネージャコンポーネント530は、4096バイト(4K)サイズのCBlockを生成するように構成することができる。例えば、ファイルマネージャコンポーネント530は、1MBのファイルを書き込む要求を受け取った後に、1MBのファイルを複数の4KサイズのCBlockに分割する。他の実施形態では、ファイルマネージャコンポーネント530を、異なるサイズのCBlockを生成するように構成することができる。
図6に、1MBのファイルをCBlockに分割し、圧縮し、暗号化して記憶する例を示す。データ605は、VM130から受け取られるデータを表す。ファイルマネージャ530は、データ605をCBlock601〜604に分割する。CBlock601〜604の各々は、4Kサイズのデータブロックを示す。
【0056】
ステップ560において、CBlockの各々について一意のフィンガープリントを生成する。ある実施形態では、処理エンジン520が、ストレージプール300に記憶すべき各CBlockのフィンガープリントを計算するように構成される。処理エンジン520は、一意のフィンガープリント識別子を生成する、ハッシュなどの異なるフィンガープリント技術を実装することができる。例えば、
図6では、処理エンジン520が、SHA−1を用いて、CBlock601〜604の各々についてCBlockフィンガープリント611〜614として表す一意のCBlockフィンガープリントを生成することができる。
【0057】
ステップ565において、CBlockの各々を暗号化する。ある実施形態では、処理エンジン520が、暗号化アルゴリズム及び暗号鍵に基づいてCBlockの各々を暗号化して、暗号文を含む暗号化CBlockを生成する。例えば、処理エンジン520は、暗号化アルゴリズムAES−XTSを用いてCBlock601〜604を暗号化する。処理エンジン520は、ストレージコントローラ320によって提供される暗号鍵及びアルゴリズムに基づいて異なるタイプの暗号化アルゴリズムを使用するように構成することができる。
【0058】
ある実施形態では、処理エンジン520が、暗号化の前にストレージコントローラ320に暗号化情報を要求する。暗号化情報は、暗号化アルゴリズム、暗号鍵、及び暗号化テーブル内で特定の暗号鍵を識別するために使用される暗号化インデックス値などの、暗号化を実行するために必要なデータを含む。1つの例では、ホスト100の起動時に暗号化情報を要求することができる。起動時には、ホスト100内で実行中のDVAh405が、ストレージコントローラ320に暗号鍵要求を送信する。この結果、ストレージコントローラ320は、暗号化テーブルにアクセスして、暗号化アルゴリズム、暗号鍵及び暗号化インデックス値をDVAh405に送信する。また、DVAh405は、新たな暗号鍵及びアルゴリズムをストレージコントローラ320に定期的に要求するように構成することもできる。ストレージコントローラ320は、ストレージコントローラ320とホスト100との間のハンドシェーク手順の一部として新たな暗号鍵及びアルゴリズムを定期的にDVAh405に送信するように構成することもできる。
【0059】
ある実施形態では、処理エンジン520が、CBlockを暗号化する前に、利用可能な市販の圧縮アルゴリズムを用いてCBlockの各々を圧縮するように構成される。処理エンジン520は、CBlockの圧縮後に、圧縮済みCBlockを暗号化する。例えば、処理エンジン520は、最初にCBlock601〜604を圧縮して圧縮済みCBlock621〜624を生成し、その後にCBlock621〜624を暗号化する。
【0060】
ある実施形態では、処理エンジン520を、特定の暗号化CBlockを暗号化するために使用した特定の暗号鍵に関連する暗号化インデックス値を特定の暗号化CBlockと共に記憶するように構成することができる。これを行うことにより、特定の時点にどの暗号鍵を用いてデータを暗号化したかをDVAh405とストレージコントローラ320とが別個に追跡する必要がなくなる。むしろ、DVAh405は、特定のCBlockを復号するための特定の暗号鍵を要求する際に、暗号化CBlockと共に記憶された暗号化インデックス値を検索キーとして使用することができる。例えば、DVAh405は、暗号化インデックス値「001」に関連する特定の暗号鍵を用いてCBlock601を暗号化して暗号化CBlock621を生成する。次に、DVAh405は、暗号化インデックス値001を暗号化CBlock621と共に記憶する。例えば、インデックス値001は、CBlock621のメタデータ内に記憶することができる。DVAh405は、別の時点でCBlock621を復号する必要がある場合、CBlock621のメタデータからインデックス値001を検索し、このインデックス値001に関連する暗号鍵要求をストレージコントローラ320に対して生成することができる。ストレージコントローラ320は、暗号鍵要求を受け取ると暗号化テーブルにアクセスし、インデックス値001を検索キーとして使用して特定の暗号鍵を検索することができる。その後、ストレージコントローラ320は、CBlock621を復号するために必要な暗号鍵をDVAh405に返送することができる。
【0061】
再び
図5を参照して、ステップ570に、各CBlockを暗号化した後に、記憶する暗号化CBlockの1又は2以上のクランプを生成することを示す。ある実施形態では、クランプが、記憶する特定の数のCBlockを含むように構成される。例えば、暗号化CBlock621〜624を単一のクランプ630内に構造化することができる。別の例では、暗号化CBlock621〜624を、第1のクランプが暗号化CBlock621及び622を含み、第2のクランプが暗号化CBlock623及び624を含むように、複数のクランプ内に構造化することができる。ある実施形態では、クランプを、異なる長さの連続データを表すように構成することができ、従って異なる数のCBlockを含むように構成することができる。
【0062】
ステップ575において、各クランプについてクランプフィンガープリントを生成する。ある実施形態では、クランプフィンガープリントが、ステップ555で生成されたCBlockフィンガープリントに基づく。例えば、
図6では、CBlockフィンガープリント611〜614を用いてクランプフィンガープリント635が生成され、クランプ630にパッケージ化される。ある実施形態では、クランプフィンガープリントが、クランプに含まれるCBlockに関連するデータブロックフィンガープリントのフィンガープリントとして計算される。クランプフィンガープリントは、クランプ内のデータブロックの組全体のハッシュ値を計算すべき場合に計算されるハッシュ値に等しい計算されたハッシュ値となるように、データブロックフィンガープリントの組み合わせとして計算することができる。他の実施形態では、クランプ内のCBlockのデータブロックフィンガープリントからの特性値を組み合わせる他の組み合わせ技術を用いてクランプフィンガープリントを計算することができる。
【0063】
ステップ580において、暗号化CBlockを含む生成されたクランプをストレージコントローラ320に送信して1又は2以上のストレージノードに記憶する。ある実施形態では、DVAh405が、生成されたクランプをストレージコントローラ320に送信し、ストレージコントローラ320が、どのストレージノードがクランプを記憶すべきかを決定する。ある実施形態では、DVAh405を、ホスト100内に存在するキャッシュ113にクランプを記憶するように構成することができる。例えば、処理エンジン520は、生成されたクランプのコピーをサブコンポーネントのキャッシュマネージャ513に送信するように構成される。キャッシュ113に対する読み出し及び書き込みを行うように構成されたキャッシュマネージャ513は、クランプをキャッシュ113に書き込む。
【0064】
ステップ585において、クランプフィンガープリントを一意の識別子として用いてクランプに対して重複排除を実行する。ある実施形態では、ストレージコントローラ320が、生成されたクランプのクランプフィンガープリントとフィンガープリントインデックス521に記憶されているクランプフィンガープリントとを比較することによって重複排除を実行する。フィンガープリントインデックス521は、記憶されたクランプのクランプフィンガープリントを含む。例えば、ストレージコントローラ320は、クランプフィンガープリント635とフィンガープリントインデックス521内の既存のクランプフィンガープリントとを比較することによってクランプ630に対して重複排除を実行する。クランプフィンガープリント635がフィンガープリントインデックス521内の既存のクランプフィンガープリントに一致する場合、クランプ630は既にストレージプール300に記憶されており、従ってストレージコントローラ320は、クランプ630をストレージノードに記憶しない。一方で、クランプフィンガープリント635がフィンガープリントインデックス521内のクランプフィンガープリントのいずれにも一致しない場合、クランプ630は現在のところストレージプール300に記憶されておらず、従ってストレージコントローラ320は、クランプ630をストレージノードのうちの1つに記憶する。ある実施形態では、重複排除を空間再利用ジョブ中に実行することができる。空間再利用については、本明細書のRE-ENCRYPTING DATA USING SPACE RECLAMATION(空間再利用を用いたデータの再暗号化)の節において詳細に説明する。
【0065】
ある実施形態では、DVAh405が、クランプをキャッシュ113に記憶する前に、生成されたクランプの重複排除を実行することができる。例えば、処理エンジン520は、キャッシュマネージャ513と通信してキャッシュ113内にクランプ630のクランプフィンガープリント635が存在するかどうかを判断するように構成することができる。クランプフィンガープリント635がキャッシュ113内に存在する場合、クランプ630はキャッシュ113に記憶されない。一方で、クランプフィンガープリント635がキャッシュ113内に存在しない場合、キャッシュマネージャ513は、クランプ630をキャッシュ113に記憶する。
【0066】
データ復号
ある実施形態では、DVAh405が、ストレージプール300又はキャッシュ113のいずれかに記憶されている暗号化データを読み出すための読み出し要求を受け取ると、要求されたデータを復号して読み出すためにストレージコントローラ320から適切な暗号鍵を検索する。例えば、CBlock601からデータを読み出すための読み出し要求が受け取られた場合、処理エンジン520は、CBlock601を含む適切なクランプであるクランプ630を突き止める。CBlock601は、CBlock621に圧縮され暗号化されているので、処理エンジン520は、CBlock621に関連するメタデータを読み出して、CBlock621と共に記憶されている暗号化インデックス値を特定する。暗号化インデックス値が、処理エンジン520が到着書き込みデータを暗号化するために現在使用している暗号化インデックス値と同じものである場合、処理エンジン520は、現在記憶されている暗号鍵を用いてCBlock621を復号することができる。一方で、CBlock621のメタデータからの暗号化インデックス値が、処理エンジン520が現在使用している暗号化インデックス値と異なる場合、処理エンジン520は、CBlock621を復号するのに必要な暗号鍵を検索するための暗号鍵要求を生成してストレージコントローラ320に送信する。ストレージコントローラ320は、処理エンジン520から暗号鍵要求を受け取ると、暗号化インデックス値を用いて暗号化テーブルから暗号鍵を検索し、暗号鍵と暗号化インデックス値とを処理エンジン520に返送する。その後、処理エンジン520は、受け取った暗号鍵を用いてCBlock621を復号し、CBlock621を解凍して、CBlock601に記憶されている解凍された復号データを生成して読み出す。
【0067】
暗号鍵の循環
DVAh405がデータを暗号化するために使用する暗号鍵は、セキュリティを目的として定期的に又は要求時に更新することができる。暗号鍵を定期的に更新することで、ハッカーが暗号化データを復号する脅威が防がれる。また、セキュリティ侵害が暗号鍵の更新を促してデータの再暗号化を引き起こすこともできる。
【0068】
ある実施形態では、暗号化テーブルが、複数行の暗号鍵と暗号化インデックス値とを含む。ストレージコントローラ320は、暗号鍵を循環させるために、次の暗号鍵を生成して暗号化テーブルの次の行に組み込むように構成される。ストレージコントローラ320は、暗号化テーブルの最後の行に達すると、最初に戻ってテーブルの先頭の行を再使用するように構成される。ある実施形態では、暗号化テーブルを、暗号化テーブル内の暗号鍵の値を更新するように構成することができる。暗号鍵と暗号化インデックス値とのペアについて暗号鍵の値が更新された場合には、古い暗号鍵と暗号化インデックス値とのペアを使用する全ての暗号化データを再暗号化する必要がある。例えば、暗号化テーブルが暗号鍵と暗号化インデックス値とのペアを100行含み、現在ストレージコントローラ320が行番号100の暗号鍵と暗号化インデックス値とのペアを使用している場合、ストレージコントローラ320は、最初に戻って行番号1の暗号鍵と暗号化インデックス値とのペアを使用するように構成される。暗号鍵の行の再利用時に暗号化テーブルが行番号1について新たな暗号鍵を生成する場合、行番号1の暗号鍵と暗号化インデックス値とのペアを用いて以前に暗号化された暗号化データは、行番号1に関連する暗号鍵と暗号化インデックス値とのペアの新たな値で再暗号化される。
【0069】
1つの実施形態では、暗号化テーブルに新たな暗号鍵が組み込まれると、以前に暗号化されたデータは、この新たに組み込まれた暗号鍵で再暗号化される。1つの実施形態では、暗号化テーブル内の行が、その行に関連する暗号鍵で暗号化された全てのデータが別の暗号鍵で再暗号化されるまで再使用されない。
【0070】
ある実施形態では、暗号化テーブルが、暗号鍵と暗号化インデックス値とのペアに関連する暗号化アルゴリズムの列を行毎に含む。暗号化アルゴリズムは、関連する暗号鍵を用いてデータを暗号化するための暗号化方法を記述する。ストレージプール300は、同時に複数の暗号化アルゴリズムをサポートするように構成することができる。例えば、暗号鍵の循環中に、新たに割り当てられた暗号鍵が異なる暗号化方法に関連付けられた場合、ストレージコントローラ320は、ストレージプール300及びキャッシュ113に記憶されている全てのデータを新たな暗号鍵と新たな暗号化アルゴリズムとで再暗号化するように構成される。ストレージプール300内及びホスト100上のキャッシュ113内に記憶されているデータを再暗号化するには、最初に暗号化データを復号した後に、新たな暗号鍵及び暗号化方法を用いてデータを再暗号化する必要がある。
【0071】
空間再利用を用いたデータの再暗号化
ストレージプール300内及びホスト100上のキャッシュ113内に記憶されているデータの再暗号化プロセスは、空間再利用を用いて行うことができる。空間再利用とは、もはやアクセスできない記憶データによって現在占められている記憶スペースを再利用するプロセスのことである。空間再利用中には、今もなお使用されているデータが新たな記憶領域にコピーフォワードされる。コピーフォワード段階中には、データを復号した後に新たな暗号鍵を用いて再暗号化することができる。
【0072】
ある実施形態では、ストレージプール300内のファイルシステムが、ストレージプール300内でどのようにデータを編成するかを管理する。例えば、ファイルシステムは、データをストレージプール300内のログ構造ファイルシステムとして編成することができる。ログ構造ファイルシステムとは、データが1又は2以上のデータログに順次に書き込まれるファイルシステムのことである。各データログは、本明細書ではコンテナと呼ぶ特定の記憶領域を含むことができる。コンテナは、設定されたコンテナのサイズに基づいて複数のクランプを記憶することができる。上述したように、ストレージコントローラ320は、ストレージノードのコンテナ内にクランプを記憶するための書き込み要求を受け取る。
【0073】
ファイルシステムに記憶されたオブジェクトは、時間の経過とともに更新されて削除され、ファイルシステムは、もはやどのソフトウェアアプリケーションも使用していないデータ(本明細書では「デッドデータ」と呼ぶ)を含むクランプを蓄積する。デッドデータを含むクランプは、「デッドクランプ」と呼ばれる。例えば、最初にクランプA、B及びC上にオブジェクトOが記憶されていると仮定する。オブジェクトOが更新された場合には、更新されたバージョンのオブジェクトOをクランプX、Y及びZに書き出すことができる。この更新に応答して、オブジェクトOをクランプA、B及びCにマッピングするメタデータが削除され、オブジェクトOをクランプX、Y及びZにマッピングするメタデータが作成される。クランプA、B及びCに他のオブジェクトがマッピングされていないと仮定すれば、更新後にはクランプA、B及びCがデッドになる。すなわち、クランプA、B及びC上のデータは、もはやどのソフトウェアアプリケーションによっても使用されていない。空間再利用は、デッドクランプによって占められている記憶領域を再利用して、新たな「生きた(ライブ)」データの記憶にクランプを再利用できるようにする処理である。空間再利用中には、既存のコンテナ内のライブクランプが新たなコンテナにコピーされることにより、ライブクランプとデッドクランプの両方を含んでいた以前のコンテナを再利用できるようになる。ライブクランプを既存のコンテナから新たなコンテナに移動させるプロセスは、コピーフォワード動作と呼ばれる。
【0074】
ある実施形態では、データログ内で作成された新たなコンテナにライブクランプを移動させることによって既存のコンテナからの記憶スペースを再利用する空間再利用ジョブを用いて空間再利用を行うことができる。ストレージコントローラ320は、空間再利用ジョブの複数のステップを協調させるように構成されたジョブコントローラと呼ばれるソフトウェア層を含むことができる。別の実施形態では、ジョブコントローラを、ストレージプール300に通信可能に結合された別個のサーバに実装することができる。ジョブコントローラは、異なる空間再利用タスクを1又は2以上のタスクワーカに委任するように構成される。タスクワーカとは、ストレージプール300内の特定のストレージノード上に実装された、並行して実行できるプロセス又はスレッドのことを意味する。特定のストレージノード上に位置するタスクワーカは、対応するストレージノードに記憶されたクランプに関連するタスクを受け取る。別の実施形態では、タスクワーカが、ホスト100上に実装されたプロセス又はスレッドを意味することができる。
【0075】
ジョブコントローラは、空間再利用ジョブをスケジュールすべき時点、利用可能なタスクワーカに委任するためにデータを複数のタスクに分割する方法を決定するとともに、タスクワーカの状態を管理してどのタスクワーカが特定のタスクに利用可能であるかを決定するように構成される。ある実施形態では、ジョブコントローラが、ストレージプール内の現在利用可能な記憶スペース、或いは記憶されているクランプ上の暗号鍵及び/又は暗号化方法を更新する必要性に基づいて、空間再利用ジョブを開始すると決定することができる。例えば、新たな暗号鍵をホストに送信することが必要になったり、古い暗号鍵を使用する暗号化データを再暗号化することが必要になったりする場合がある。
【0076】
空間再利用ジョブは、ライブクランプを識別して新たなコンテナに移動させるマークアンドスイープ及び/又はコピーフォワードの技術を実装する複数の段階を含むことができる。マークアンドスイープとは、(a)現在「生きている(ライブ)」オブジェク又はソフトウェアエンティティが「到達可能な」オブジェクトを識別し、(b)これらのオブジェクトのデータを記憶しているクランプを「ライブ」としてマーキングし、(c)「ライブ」としてマーキングされていない全てのクランプを解放することを伴う方法である。ある実施形態では、ジョブコントローラが、(1)ファイルシステムメタデータを用いてライブオブジェクトを識別し、(2)オブジェクトからクランプへのマッピングに基づいて、ライブオブジェクトを含むクランプをライブクランプとして識別し、(3)フィンガープリントインデックス521を用いて、識別されたライブクランプを含むコンテナを決定する、というマークアンドスイープタスクをタスクワーカに委任するように構成される。
【0077】
ジョブコントローラは、ライブクランプを含むコンテナを決定すると、ライブクランプを新たなコンテナにコピーフォワードすべきコンテナIDのサブセットをタスクワーカに委任するように構成される。ある実施形態では、タスクワーカの各々が、コンテナIDのサブセットを受け取り、各コンテナを反復して各コンテナ内のライブクランプにコピーフォワード動作を実行する。
【0078】
ある実施形態では、タスクワーカが、特定のコンテナのライブクランプの各CBlock内に記憶されている暗号化インデックス値を特定するように構成される。例えば、特定のライブクランプをクランプ630とした場合、タスクワーカは、クランプ630内のCBlockに関連するメタデータを読み出して、CBlock621〜624内のデータを暗号化するために使用された暗号化インデックス値を特定する。ある実施形態では、タスクワーカを、CBlockの復号に必要な暗号鍵を検索するための暗号鍵要求をストレージコントローラ320に送信するように構成することができる。タスクワーカは、ストレージコントローラ320から暗号鍵を受け取ると、受け取った暗号鍵を用いてCBlockを復号する。1つの実施形態では、タスクワーカが、受け取った暗号鍵をキャッシュに入れ、これらの暗号鍵を後続のライブクランプ内のCBlockの復号に使用することができる。
【0079】
1つの実施形態では、ストレージコントローラ320を、コピーフォワードするコンテナIDのサブセットをジョブコントローラが最初に送信する際に現在の暗号鍵と暗号化インデックス値とをタスクワーカに送信するように構成することができる。タスクワーカは、現在の暗号鍵を用いてCBlockを暗号化するように構成される。CBlockが暗号化された後には、この暗号化CBlockのための新たなクランプが生成され、この新たなクランプがコピーフォワード処理の一部として新たなコンテナに記憶される。
【0080】
キャッシュ内データの再暗号化
空間再利用の一部として、キャッシュ113に記憶されている暗号化データを再暗号化することもできる。ジョブコントローラは、キャッシュ113内のデッドクランプを除去してキャッシュ113に記憶されているライブクランプを再暗号化することにより、記憶スペースを再利用するジョブをタスクワーカに委任するように構成することができる。ある実施形態では、1又は2以上のタスクワーカを処理エンジン520内のプロセスとして実装することができる。タスクワーカは、キャッシュ113に記憶されているクランプをウォークスルーしてライブクランプを識別するように構成することができる。その後、タスクワーカは、識別されたライブクランプ内のCBlockに関連する暗号鍵インデックス値を特定する。ある実施形態では、タスクワーカを、CBlockの復号に必要な暗号鍵を検索するための暗号鍵要求をストレージコントローラ320に送信するように構成することができる。タスクワーカは、ストレージコントローラ320から暗号鍵を受け取ると、受け取った暗号鍵を用いてCBlockを復号する。1つの実施形態では、タスクワーカが、受け取った暗号鍵をキャッシュに入れ、これらの暗号鍵を後続のライブクランプ内のCBlockの復号に使用することができる。
【0081】
次に、タスクワーカは、ストレージコントローラ320から受け取った現在の暗号鍵を用いてCBlockを再暗号化する。1つの実施形態では、ジョブコントローラ320を、記憶スペースを再利用するジョブを最初に委任する際に現在の暗号鍵と暗号化インデックス値とをタスクワーカに送信するように構成することができる。CBlockが暗号化された後には、この暗号化CBlockのための新たなクランプが生成され、この新たなクランプがキャッシュ113に記憶される。
【0082】
別の実施形態では、キャッシュ113に記憶されているデータを再暗号化するタスクを、ホスト100内のDVAh405によって、ストレージコントローラ320によって、或いはユーザ又はシステム管理者によって手動で開始されるスタンドアロンプロセスとすることもできる。
【0083】
ハードウェアの概要
1つの実施形態によれば、本明細書で説明する技術が、1又は2以上の専用コンピュータ装置によって実装される。この専用コンピュータ装置は、これらの技術を実行するためのハードウェア組み込み型とすることもでき、或いはこれらの技術を実行するように永続的にプログラムされた1又は2以上の特定用途向け集積回路(ASIC)又はフィールドプログラマブルゲートアレイ(FPGA)などのデジタル電子装置を含むこともでき、或いはファームウェア、メモリ、その他の記憶装置、又はこれらの組み合わせに含まれるプログラム命令に従ってこれらの技術を実行するようにプログラムされた1又は2以上の汎用ハードウェアプロセッサを含むこともできる。このような専用コンピュータ装置は、カスタムハードワイヤードロジック、ASIC又はFPGAと、これらの技術を実現するためのカスタムプログラミングとを組み合わせることもできる。この専用コンピュータ装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、ハンドヘルド装置、ネットワーク装置、又はこれらの技術を実装するためのハードワイヤードロジック及び/又はプログラムロジックを組み込んだ他のいずれかの装置とすることもできる。
【0084】
例えば、
図7は、実施形態を実装できるコンピュータシステム700を示すブロック図である。コンピュータシステム700は、情報を通信するためのバス702又はその他の通信機構、及びバス702に結合された、情報を処理するためのハードウェアプロセッサ704を含む。ハードウェアプロセッサ704は、例えば汎用マイクロプロセッサとすることができる。
【0085】
コンピュータシステム700は、バス702に結合された、情報とプロセッサ704が実行すべき命令とを記憶するランダムアクセスメモリ(RAM)又はその他の動的記憶装置などのメインメモリ706も含む。メインメモリ706は、プロセッサ704が実行すべき命令の実行中に一時的変数又はその他の中間情報を記憶するために使用することもできる。このような命令は、プロセッサ704がアクセスできる非一時的記憶媒体に記憶された時に、コンピュータシステム700を、命令内で指示される動作を実行するようにカスタマイズされた専用機械の状態にする。
【0086】
コンピュータシステム700は、バス702に結合された、静的情報とプロセッサ704のための命令とを記憶するリードオンリメモリ(ROM)708又はその他の静的記憶装置をさらに含む。情報及び命令を記憶するための磁気ディスク、光学ディスク又は固体ディスクなどの記憶装置710も設けられ、バス702に結合される。
【0087】
コンピュータシステム700は、バス702を介して、コンピュータユーザに情報を表示するブラウン管(CRT)などのディスプレイ712に結合することができる。バス702には、プロセッサ704に情報及びコマンド選択を伝える英数字キー及びその他のキーを含む入力装置714も結合される。別のタイプのユーザ入力装置には、プロセッサ704に方向情報及びコマンド選択を伝えてディスプレイ712上のカーソルの動きを制御するマウス、トラックボール又はカーソル方向キーなどのカーソル制御716がある。通常、この入力装置は、装置が平面内の位置を特定できるようにする第1の軸(例えば、x)及び第2の軸(例えば、y)という2つの軸における2つの自由度を有する。
【0088】
コンピュータシステム700は、カスタマイズされたハードワイヤードロジック、1又は2以上のASIC又はFPGA、ファームウェア、及び/又はコンピュータシステムと組み合わせてコンピュータシステム700を専用機械にする、又はそのようにプログラムするプログラム論理を用いて、本明細書で説明した技術を実装することができる。1つの実施形態によれば、本明細書の技術が、メインメモリ706に含まれる1又は2以上の命令の1又は2以上のシーケンスをプロセッサ704が実行したことに応答してコンピュータシステム700によって実行される。このような命令は、記憶装置710などの別の記憶媒体からメインメモリ706に読み込むことができる。プロセッサ704は、メインメモリ706に含まれる命令シーケンスを実行することにより、本明細書で説明した処理ステップを実行するようになる。別の実施形態では、ソフトウェア命令の代わりに又はこれと組み合わせてハードワイヤード回路を使用することができる。
【0089】
本明細書で使用する「記憶媒体」という用語は、データ及び/又は特定の方法で機械を動作させる命令を記憶するあらゆる非一時的媒体を意味する。このような記憶媒体は、不揮発性媒体及び/又は揮発性媒体を含むことができる。不揮発性媒体は、例えば記憶装置710などの光学ディスク、磁気ディスク又は固体ドライブを含む。揮発性媒体は、メインメモリ706などの動的メモリを含む。一般的な記憶媒体としては、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、固体ドライブ、磁気テープ、又は他のあらゆる磁気データ記憶媒体、CD−ROM、他のあらゆる光学データ記憶媒体、穴パターンを有するあらゆる物理媒体、RAM、PROM、及びEPROM、FLASH−EPROM、NVRAM、他のあらゆるメモリチップ又はカートリッジが挙げられる。
【0090】
記憶媒体は送信媒体とは異なるが、送信媒体と共に使用することもできる。送信媒体は、記憶媒体間の情報の転送に関与する。例えば、送信媒体としては、バス702を構成する配線を含む、同軸ケーブル、銅線及び光ファイバが挙げられる。送信媒体は、電波及び赤外線によるデータ通信中に生成されるような音波又は光波の形をとることもできる。
【0091】
実行のためにプロセッサ704に1又は2以上の命令の1又は2以上のシーケンスを搬送することには、様々な形の媒体が関与することができる。例えば、最初にリモートコンピュータの磁気ディスク又は固体ドライブ上で命令を搬送することができる。リモートコンピュータは、その動的メモリにこれらの命令をロードし、モデムを用いて電話回線を介してこの命令を送信することができる。コンピュータシステム700のローカルモデムは、電話回線上でデータを受け取り、赤外線送信機を用いてデータを赤外線信号に変換することができる。この赤外線信号において搬送されるデータを赤外線検出器が受け取り、適切な回路がこのデータをバス702上に配置することができる。バス702は、このデータをメインメモリ706に搬送し、ここからプロセッサ704が命令を取り出して実行する。任意に、メインメモリ706が受け取った命令は、プロセッサ704による実行前又は実行後に記憶装置710に記憶することもできる。
【0092】
コンピュータシステム700は、バス702に結合された通信インターフェイス718も含む。通信インターフェイス718は、ローカルネットワーク722に接続されたネットワークリンク720に結合して双方向データ通信を提供する。例えば、通信インターフェイス718は、総合デジタル通信網(ISDN)カード、ケーブルモデム、衛星モデム、又は対応するタイプの電話回線へのデータ通信接続を提供するモデムとすることができる。別の例として、通信インターフェイス718を、互換性のあるLANにデータ通信接続を提供するローカルエリアネットワーク(LAN)カードとすることもできる。無線リンクを実装することもできる。このようなあらゆる実装では、通信インターフェイス718が、様々なタイプの情報を表すデジタルデータストリームを搬送する電気信号、電磁信号又は光信号を送受信する。
【0093】
通常、ネットワークリンク720は、1又は2以上のネットワークを介して他のデータ装置にデータ通信を提供する。例えば、ネットワークリンク720は、ローカルネットワーク722を介したホストコンピュータ724への、又はインターネットサービスプロバイダ(ISP)726によって動作するデータ設備への接続を提供することができる。さらに、ISP726は、今では一般的に「インターネット」728と呼ばれるワールドワイドパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク722及びインターネット728は、いずれもデジタルデータストリームを搬送する電気信号、電磁信号又は光信号を使用する。コンピュータシステム700との間でデジタルデータを搬送する、様々なネットワークを介した信号及びネットワークリンク720上の通信インターフェイス718を介した信号は、送信媒体の形態例である。
【0094】
コンピュータシステム700は、(単複の)ネットワーク、ネットワークリンク720及び通信インターフェイス718を介してメッセージを送信し、プログラムコードを含むデータを受け取ることができる。インターネットの例では、サーバ730が、インターネット728、ISP726、ローカルネットワーク722及び通信インターフェイス718を介して、アプリケーションプログラムのための要求されたコードを送信することができる。
【0095】
プロセッサ704は、この受け取ったコードを受信時に実行することも、及び/又は後で実行できるように記憶装置710又はその他の不揮発性記憶装置に記憶することもできる。
【0096】
上述した明細書では、実装によって異なり得る数多くの特定の詳細を参照しながら本発明の実施形態を説明した。従って、明細書及び図面については、限定的な意味ではなく例示的な意味でとらえるべきである。本発明の範囲、及び出願人が発明の範囲として意図するものを示す唯一かつ排他的なものは、本出願から特定の形で生じる一連の請求項の逐語的及び等価的範囲であり、これにはあらゆる今後の補正が含まれる。