(58)【調査した分野】(Int.Cl.,DB名)
前記データが前記オフセットに隣接されると、前記データを前記少なくとも1つのストリームに書き込み、前記少なくとも1つのストリームのそれぞれについて前記オフセットを前進させ、前記データの前記複数のバッファを解放する、請求項2に記載の方法。
前記データが前記少なくとも1つのストリームのうちの複数に常駐できるようにするために、複数のディスク・マップによって前記データをマッピングすることをさらに含む、請求項1に記載の方法。
前記複数の書き込み動作のうちの少なくとも1つによって前記複数のバッファ内に上書きを検出すると、前記少なくとも1つのストリームの追加の1つを作成し、前記少なくとも1つのストリームの前記追加の1つを、前記複数のバッファに格納された前記少なくとも1つのストリームのうちの既存の1つに重ね、前記少なくとも1つのストリームの前記追加の1つはメタファイル構造に記録される、請求項1に記載の方法。
隣接のうちのいずれか1つをマージすることによって前記複数のユーザ・ファイルのうちの少なくとも1つを閉じること、および前記少なくとも1つのストリームのうちの少なくとも1つにストリームを重ね合わせることをさらに含む、請求項1に記載の方法。
複数のユーザ・ファイルを閉じた後、任意の期間後、および前記複数のユーザ・ファイルが休止していると判定された後、のうちの1つで、断片化プロセスを実行することをさらに含み、前記断片化動作は、前記複数のユーザ・ファイルのそれぞれの前記少なくとも1つのストリームを単一のストリームに再配置構成する、請求項1に記載の方法。
前記データが前記オフセットに隣接されると、前記データを前記少なくとも1つのストリームに書き込み、前記少なくとも1つのストリームのそれぞれについて前記オフセットを前進させ、前記データの前記複数のバッファを解放するための、第7の実行可能部分をさらに備える、請求項10に記載のコンピュータ・プログラム。
【発明を実施するための形態】
【0007】
以下の説明および記載された主題全体を通じて、例示された諸実施形態に関連する以下の用語が記載されている。
【0008】
「バッファのプール」は、それぞれが単一の断片を保持できる複数のバッファを言い表すものと意図される。「バッファのプール」は、メモリ・バッファのプールとも言い表すことが可能であり、メモリ階層構造に関連し、これを企図して使用することが可能である。
【0009】
「断片」とは、所定サイズの固定サイズ片へのユーザ・ファイルの論理的分割を言い表すものと意図される。単なる例として、一実装では、断片は任意の便利な所定のサイズを有することができるが、あらかじめ固定しておかなければならない。単なる例として、1片は64KBの断片サイズを使用することができる。しかしながらこの断片サイズは固定しないことも可能である。
【0010】
「ユーザ・ファイル」とは、バックアップ・アプリケーションによって作成されているファイルを言い表すものと意図される。
【0011】
「断片マップ」とは、メモリ・バッファとユーザ・ファイル位置との間、およびその逆をマッピングする働きをするデータ構造を言い表すものと意図される。
【0012】
「ディスク・マップ」とは、各ユーザ・ファイルのデータが複数の圧縮モジュール・ストリーム内に常駐できるようにするために、ユーザ・ファイルの断片を圧縮モジュール・ストリームへとマッピングする断片マップと同様の、オンディスク構造(on-disk structure)を言い表すものと意図される。
【0013】
「コントロール・モジュール」または「コントローラ・モジュール」とは、ランダムなパターンの書き込みオフセットを有するネットワーク接続ストレージ・システム(NAS)またはストレージ・システムを介して、クライアントから受信される各書き込み動作を使用して、何を実行するかを決定および管理するように構成された、モジュールを言い表すものと意図される。
【0014】
「圧縮モジュール」とは、データのストリームの受信、データのストリームの開始、ストリームの圧縮、およびデータ・ストリームのストレージへの格納の諸動作を、管理、支援、または実行することが意図される。圧縮モジュールは、データ・ストリームの受信、開始、圧縮、およびストレージへの格納を実行するために、重複排除ストレージ・サブシステム内で独立に動作するか、または他のコンポーネントを支援するように構成することが可能である。
【0015】
本発明は、複数のメモリ・バッファおよびストリームベース・アルゴリズムを使用する方法を有するランダムなパターンの書き込みオフセットを有する、ネットワーク接続システム(NAS)、あるいは任意のランダム・アクセス書き込みまたはストレージ・システムを介した、データ重複排除に関する、ソリューションおよび機能強化を提供するものである。大規模データ・セットは、従来、格納されるバイト当たりのコストが最も低く、信頼性が高く、アーカイブの存続期間の長い、磁気テープ上に格納されてきた。しかしながら磁気テープには、広範囲に及ぶ手作業による保守(テープ・カートリッジの装填および取り外し、小規模な機械的問題の解決、移送、および格納など)の必要性による多くの欠点もある。こうした欠点により、テープ仮想化製品の開発が促進されてきた。テープ仮想化製品は、大規模ディスク・アレイを使用してデータを格納する一方で、テープ様のインターフェースを残りのバックアップ・システムに向けることができる。テープ仮想化システムは、正規のテープ・ライブラリと同様に通常のバックアップ・システムに収まるため、問題なく既存のシステムに適合する一方で、実際のデータはディスク・アレイ上に維持し、前述のテープ・システムのほとんどの欠点を排除することができる。しかしこれらのテープ・エミュレーション・システムは、ディスク・アレイのバイト当たりのコストがテープ・カートリッジよりも非常に高額であるという、別の問題をもたらす。
【0016】
こうした問題は、ほとんどの場合、バックアップ・データ・セット内に大量のデータ冗長性があることを観察することによって解決可能である。今日実行されるバックアップのバックアップ・データは、ほとんどの場合、昨日実行されたバックアップによって生成されたバックアップ・データとほぼ同じである。この同様のデータ領域またはデータ・シーケンスを識別することにより、その両方に同じストレージ・スペースを使用して、大量のストレージ・スペースを節約することが可能である。このメカニズムが重複排除と呼ばれ、結果的に多くの場合、10倍、時にはそれ以上、必要ストレージ・スペースを削減することが可能になる。このスペース削減によって、ディスクベースのテープ仮想化が、重複排除テープ仮想化製品が市場に出回るという商業的な成功を反映する、従来の磁気テープを置換するための経済的に実行可能な命題となる。バックアップ・データ・セットは大規模であり、ペタバイトで測定可能である。加えてバックアップ・ストリームは、典型的な毎秒ギガバイトの速度を有する。こうした速度でデータを処理することが可能であり、このような大規模データ・セット内で同様のシーケンスを発見することが可能なシステムを設計することが、技術的な問題である。
【0017】
ハッシュベースのアルゴリズムは設計および実装が比較的簡単であるが、同一のブロックをルックアップするために使用されるインデックス(または「ハッシュ・テーブル」)が非常に大規模であるという、1つの重要な問題がある。ブロック・サイズが8キロバイトであると仮定すると、1ペタバイトのデータ・セットのインデックスにおけるエントリ数は、128GBとなってしまう。エントリ・サイズが数バイトであると仮定すると、インデックスはおよそテラバイトのストレージを占有する可能性がある。こうした大規模インデックスをメモリ内に維持しておくことはできないため、ディスク上に常駐させる必要があり、ハードディスクのシーク待ち時間により各ルックアップが非常に遅くなる。着信データ速度が毎秒1ギガバイトであると仮定すると、128キロのルックアップが必要であり、こうしたシーク速度に対処できるのは非合理的なディスクベース・システムである。ストリームベースのソリューションは、かなり少ないキロバイト当たりのハッシュ・エントリを格納することによって、この問題を解決する。これにより、ハッシュ・テーブル全体をメモリ内に常駐させることが可能であり、ルックアップは格段に速くなり、性能を大幅に向上させ、データ・セットの規模を大幅に大きくすることができる。これらすべては、ハッシュベースのアルゴリズムに比べて、アルゴリズムの複雑さが増すことを犠牲にして生じるものである。
【0018】
上記では、テープ・データ・ストリームの形で重複排除システムに入るバックアップ・データについて言及している。バックアップ・データは他の形でシステムに入ることも可能であり、その中で最も顕著なものがネットワーク接続システム(NAS)であるが、適用可能な任意のランダム・アクセス書き込み方法を含むことも可能である。NAS構成では、ユーザのバックアップ・システムはNASクライアントとして動作し、NFSまたはCIFSのいずれかのプロトコルを介して、ファイルの形でデータを書き込むように構成される。NASのシナリオは管理者が簡単に構成しやすいが、テープ仮想化のシナリオにはない別の問題が存在する。本質的に連続しているテープ・ストリームとは異なり、NASデータ・ストリームはランダム・アクセス・パターンを示す傾向がある。これはアプリケーション自体から生じる可能性があるが、たとえアプリケーションが完全に連続してデータを書き込む場合であっても、ほとんどのオペレーティング・システムの一部であるNASプロトコル・クライアントは、このデータをバッファリングし、アクセス・パターンにある程度のランダム性を導入した後、これをサーバに送信する傾向がある。このランダム性は意図的ではないが、連続性が考慮されない、主にブロック・デバイス用に設計されたオペレーティング・システム内のファイル・システム・コードの内部設計の副産物である。ハッシュベースの重複排除アルゴリズムのソリューションは、ハッシュベースの重複排除アルゴリズムがデータをブロックのセットとして「見る」ため、比較的簡単な方法でランダム・アクセス・パターンに対処することが可能であるが、ストリームベースのアルゴリズムの場合、こうしたアプリケーションには問題が示される。本発明は、ストリームベースのアルゴリズムがこうしたワークロードに対処できるようにするため、すなわちNASシナリオにおいてストリームベースのアルゴリズムの性能特典を得るための扉を開くための方法を提案する。
【0019】
本発明は、以下のようなストリームベース・システムの特徴に基づく。第1に、各ストリームはデータ・バイトの連続したシーケンスを表すが、いくつかのストリームを「メタファイル」またはディスク・マップに集約することが可能であり、ここで連続バイトの各レンジはストリームとして表され、メタファイルは、各ストリーム・ファイルがどのようにオリジナル・ファイルのイメージ内に収められるかの記録を維持する。第2に、ストリームベースのアルゴリズムは特定粒度のブロックを使用してそれらのインデックスを格納するため、本発明は、いかなるハッシュも再計算する必要なく、マージ境界とブロック境界との位置合わせが維持されている限り、異なるストリームを1つのストリームにマージする。本発明は、前述の特徴、バッファのプールまたはメモリ・バッファのプール、およびメモリ階層を使用する。メモリ階層は、RAM、フラッシュベースのデバイス、磁気ディスク、光ストレージ、様々なタイプのメモリ(仮想を含む)、通常のディスク、ストレージ・ディスクを含むことができるが、これらに限定されず、さらに、典型的に当業者によって採用される、ソリッド・ステート・ドライブ(SSD)または他のタイプのデバイスなどのストレージ・メディア、方法、またはプロセスなどを含むこともできる。
【0020】
一実施形態では、単なる例として、コンピュータ環境はデータの重複排除ストレージのために複数の書き込み動作を受信する。重複排除ストレージのために受信されるデータが連続または不連続の場合、オーバフローがメモリ階層へと一時的に格納されると共に、このデータは複数のバッファにバッファリングされる。データは、データ構造ごとに複数のバッファ内に蓄積および更新され、このデータ構造は複数のバッファと複数のユーザ・ファイル位置との間の断片マップの役割を果たす。データは、必要なシーケンス・サイズの完全なシーケンスを形成するために、複数のバッファ内で再構築される。データは、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供される。
【0021】
図1は、本発明の諸態様が実装可能な、例示的コンピューティング環境100を示す図である。アーキテクチャは、それぞれがバックアップ・サーバ・ワークステーション101を含む管理サーバ103に、ストレージ・サービスを提供する。管理サーバ103は、バックアップの動作および秩序(police)を管理する。バックアップ・サーバ・ワークステーション101には、図内ではバックアップ・アプリケーション・クライアント1(102A)、2(102B)、3(102C)として示された、バックアップされたいくつかのバックアップ・アプリケーション・クライアント102が含まれる。いくつかのメディア・サーバ104(図内ではメディア・サーバ104A、104B、および104Cとして示される)は、いずれもネットワーク108に接続される。重複排除データ・サブシステム106が、様々なメディア・サーバ104とネットワーク108との間に提供される。重複排除データ・サブシステム106は、アーキテクチャのコンポーネント間にネットワーク間接続を提供するネットワーキング・コンポーネントを介して、相互接続される。一実施形態では、ネットワーク108は、ワイド・エリア・ネットワーク(WAN)を含むことができる。他の諸実施形態では、ネットワーク108は、ローカル・エリア・ネットワーク(LAN)、ストレージ・エリア・ネットワーク(SAN)、および当業者に知られた他のネットワーク・トポロジを含むことができる。メディア・サーバ104は、バックアップ・アプリケーション・クライアントと重複排除ストレージ・サブシステム106との間でデータをチャネリングする。重複排除ストレージ・サブシステム106は、ネットワーク108を介してデータ(書き込み動作)を受信する。
【0022】
次に
図2に進むと、前に
図1でも見られたような、重複排除ストレージ・サブシステム106の例示的部分500が示されている。重複排除ストレージ・サブシステム106の部分500は、前述の諸実施形態のメカニズムが実装可能なコンピュータ環境内で、その一部として動作可能である。しかしながら、
図2は単なる例であり、様々な諸実施形態の例示的諸態様が実装可能な特定のアーキテクチャに関して、いかなる制限をも提示または示唆することを意図するものではないことを理解されたい。以下の説明および記載された主題の範囲および趣旨から逸脱することなく、
図2に示されたアーキテクチャに対する多くの修正が実行可能である。
【0023】
重複排除ストレージ・サブシステム106は、プロセッサ520、およびランダム・アクセス・メモリ(RAM)などのメモリ540を含む。重複排除ストレージ・サブシステム106は、グラフィカル・ユーザ・インターフェース上でウィンドウなどのイメージをユーザに提示するディスプレイ、キーボード、マウス、プリンタ、などを含む、便宜上図示されていないいくつかのコンポーネントに、動作可能に結合することができる。もちろん、当業者であれば、上記コンポーネントの任意の組み合わせ、または任意数の異なるコンポーネント、周辺装置、および他のデバイスが、重複排除ストレージ・サブシステム106と共に使用可能であることを理解されよう。
【0024】
例示された実施形態では、重複排除ストレージ・サブシステム106は、メモリ540に格納されたオペレーティング・システム(OS)560(たとえばz/OS(R)、OS/2(R)、LINUX(R)、UNIX(R)、WINDOWS(R)、MAC OS(R))の制御の下で動作し、入力およびコマンドを受け入れて結果を提示するためにユーザとインターフェースする。
【0025】
重複排除ストレージ・サブシステム106は、プロセッサ520によって読み取り可能なコードに変換される、COBOL、PL/1、C、C++、JAVA(R)、ADA、BASIC、VISUAL BASIC(R)、または任意の他のプログラミング言語などのプログラミング言語で作成された、アプリケーション・プログラム580を実装する。完了後、アプリケーション・プログラム580がアクセスし、重複排除ストレージ・サブシステム106のメモリ540内に格納されたデータを操作することができる。
【0026】
さらに、本発明に従ってメカニズムおよびプロセスを実装および実行するために、OS 560は、メモリ540、プロセッサ520、アプリケーション・プログラム580、ならびに他のコンピュータ処理、ネットワーキング、およびストレージ・コンポーネントに関連して、データを格納するためにクライアントから新しい書き込み動作を受信するためのメモリ・バッファ640と、重複排除されたデータに関してストレージ内で支援するための断片マップ620と、断片マップ620と同様のディスク・マップ675と、データのストリームを開始、圧縮、および格納するための動作を管理、支援、および実行するための圧縮モジュールと、クライアントから受信したそれぞれの書き込み動作を管理するためのコントロール・モジュール650とを、実装することができる。重複排除ストレージ・サブシステム106によって処理された重複排除された文書は、
図2および
図4に示されたような本発明に従った形式で、メモリ540内に格納することができる。当業者であれば理解されるように、現在図示されているようなバッファ640のプール、ディスク・マップ675、および断片マップ620のメカニズムは、様々な形およびアーキテクチャで実装可能である。したがってここでも、本図におけるバッファ640のプール、ディスク・マップ675、および断片マップ620の例示は、重複排除ストレージ・サブシステム106内の可能なコンピューティング・コンポーネント間の論理的関係を実証するものであること、および、特定の物理的構造または関係を示唆するものでないことが、意図されている。
【0027】
一実施形態では、オペレーティング・システム560、アプリケーション・プログラム580、重複排除モジュール660、圧縮モジュール630、およびコントロール・モジュール650、ならびに、バッファ640のプール、ディスク・マップ675、および断片マップ620を実施する命令は、zipドライブ、ディスク、ハード・ドライブ、DVD/CD−ROM、デジタル・テープ、SSDなどの、1つまたは複数の固定または取り外し可能のデータ・ストレージ・デバイスを含むことが可能な、コンピュータ読み取り可能メディア内で有形に具体化される。さらに、オペレーティング・システム560およびアプリケーション・プログラム580は、重複排除ストレージ・サブシステム106によって読み取りおよび実行された場合、重複排除ストレージ・サブシステム106が本発明の実装あるいは使用またはその両方に必要な諸ステップを実行できるようにする命令を(たとえば実行可能部分内に)備える。アプリケーション・プログラム580あるいはオペレーティング・システム560またはその両方の命令は、メモリ540内に有形に具体化すること、あるいは、様々なコンポーネント(たとえば
図6のルータ320)を介してネットワーク200を通じて送信またはこれによってアクセスすること、またはその両方も可能である。したがって、本明細書で使用される可能性のある「製品」、「プログラム・ストレージ・デバイス」、および「コンピュータ・プログラム製品」という用語は、任意のコンピュータ読み取りデバイスまたはメディアからアクセス可能あるいは動作可能またはその両方の、コンピュータ・プログラムを包含するものと意図される。
【0028】
重複排除モジュール660は、ネットワーク接続ストレージ(NAS)システムからのデータの重複排除ストレージのための複数の書き込み動作を受信する際の管理を支援する。このデータは、NASシステムを介して重複排除ストレージのために受信されるデータが順不同または不連続の場合、オーバフローがメモリ階層へと一時的に格納されると共に、複数のバッファ内にバッファリングされる。データは、データ構造ごとに複数のバッファ内に蓄積および更新され、このデータ構造は複数のバッファと複数のユーザ・ファイル位置との間の断片マップの役割を果たす。データは、必要なシーケンス・サイズの完全なシーケンスを形成するために、複数のバッファ内で再構築される。データは、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供される。
【0029】
さらに、重複排除モジュールは、複数の圧縮ストリームの管理および圧縮ストリームへのユーザ・ファイル断片のマッピングを支援するために実装される。これにより、各ユーザ・ファイルのデータが複数の圧縮ストリーム404(
図4)内に常駐可能となる。さらに、圧縮ストリームは、断片に対する区画が圧縮ストリームのサイズに従うものではなく、非圧縮ストリームのサイズに従うものであることを意味する、非圧縮形式にあるものとすることができる。
【0030】
本発明の諸実施形態は、たとえば、ストレージ・エリア・ネットワーク(SAN)などのコンピューティング・デバイスのネットワークを備える分散型コンピュータ・システムを管理するための機能を含む、1つまたは複数の関連付けられたソフトウェア・アプリケーション・プログラム580を含むことができる。したがってプロセッサ520は、1つまたは複数のストレージ管理プロセッサ(SMP)を備えることができる。アプリケーション・プログラム580は、単一のコンピュータあるいは重複排除ストレージ・サブシステム106またはその両方の内部で、またはコンピューティング・デバイスのネットワークを備える分散型コンピュータ・システムの一部として、動作可能である。ネットワークは、ローカル・エリア・ネットワークあるいはインターネット接続(公衆、または、仮想プライベート・ネットワーク(VPN)接続を介したセキュアとすることができる)またはその両方を介して接続された、あるいは、ファイバ・チャネルSANまたは当業者であれば理解されるような他の知られたネットワーク・タイプを介して、1つまたは複数のコンピュータを包含することができる。(ファイバ・チャネルSANは、通常は互いに通信するためではなくストレージ・システムと通信するためにのみ、コンピュータに使用されることに留意されたい。)
【0031】
ストレージ130(図内で130A、130B、および130nとして示されたすべてのストレージ・コンポーネントを含む)は、物理的に、ストレージ・アレイなどの1つまたは複数のストレージ・デバイスからなるものとすることができる。ストレージ・アレイは、ハードディスクなどの個々のストレージ・デバイスの論理グループ化である。ある実施形態では、ストレージ130はJBOD(単純ディスク束/Just a Bunch of Disks)アレイまたはRAID(独立ディスクの冗長アレイ/Redundant Array of Independent Disks)アレイからなる。さらに物理ストレージ・アレイの集合は、物理ストレージを論理構成から分離する、ランクを形成するために組み合わせることができる。ランク内のストレージ・スペースは、書き込み/読み取り要求内に指定されるストレージ位置を画定する、論理ボリュームに割り振ることができる。
【0032】
図2に示されるように、論理ボリューム、または単に「ボリューム」は、様々な種類の割り振りを有することができる。ストレージ130Aは、2つの全体ボリューム134および136と、部分ボリューム132Aとで構成されるように示されている。ストレージ130Bは、他の部分ボリューム132Bおよび全体ボリューム140と共に示されている。ストレージ130nは、ボリューム138に対して完全に割り振られたように示されている。前述の例から、ストレージ130は、1つまたは複数の部分あるいは全体またはその両方のボリュームを含むように構成可能であることを理解されよう。さらにボリュームは、ストレージの固定ブロックを表す、いわゆる「トラック」に分割可能である。したがってトラックは所与のボリュームに関連付けられる。
【0033】
図3は、メモリ・バッファ640を使用するNASインターフェースを介した重複排除ストレージ・サブシステム(106、
図1)内の、メモリ・バッファに関連付けられた断片マップの例示的な
図350を示す。例示的な
図350は、断片マップ620によって表されるような、ユーザ・ファイル302(
図3では302A、302B、および302Cとして示される)間を関係付けたバッファ640のプールを含む。ユーザ・ファイル302の断片に一部を、指定されたメモリ・バッファ640に関連付けることが可能である(
図3はバッファのプールを示す)。これは、断片に関するデータがクライアントからまだ送信されていない場合に生じる可能性がある。
【0034】
コントロール・モジュール(650、
図2)は、それぞれの新しいアクティブなユーザ・ファイルについて、ストリームベースの圧縮モジュール内で圧縮ストリーム(404、
図4)が開始される、という規則に従って実装される。こうした各ストリームについて、現行の書き込みオフセット(オフセット)がメモリ(540、
図2)内で保持および維持される。オフセットは、ストリーム(404、
図4)に書き込まれたユーザ・ファイル302内の最後のオフセットを表す。新しい書き込み動作がユーザから受信されると必ず、新しい書き込み動作に対してメモリ・バッファ640が割り振られ、メモリ・バッファ640内にデータが格納される。断片マップ620は、新しい関連を反映するように更新される。現行書き込みオフセットに隣接する断片の準備が整うと必ず、その断片は圧縮ストリーム(404、
図4)に書き込まれ、それに応じて現行書き込みオフセットが前進する。これで書き込まれた断片のメモリ・バッファ640は、空き状態となることができる。
【0035】
図4に進むと、重複排除ストレージ・サブシステムの圧縮ストリームに関連付けられたディスク・マップの例示的な図が示されている。この例示的な
図400は、ディスク・マップ402内にユーザ・ファイル302が格納された状態のディスク・マップ402に関連付けられた、圧縮ストリーム404を含む。一実施形態では、実装は、断片マップ(620、
図2)と同様であり、ユーザ・ファイル302(
図4では302A、302B、302Cと示されている)の断片を圧縮ストリーム404(
図4では個々に、404A、404B、404C、404D、および404Eとして示されている)にマッピングする、ディスク・マップ675と呼ばれる、オンディスク構造を含むように機能強化することができる。これにより、各ユーザ・ファイル302のデータが複数の圧縮ストリーム404に常駐可能となる。さらに、圧縮ストリームは、断片に対する区画が圧縮ストリームのサイズに従うものではなく、非圧縮ストリームのサイズに従うものであることを意味する、非圧縮形式にあるものとすることができる。圧縮ストリームは、開始、圧縮、および格納可能である。
【0036】
コントロール・モジュール(650、
図2)の実装は、本発明のコントロール・モジュールの論理を機能強化する。前述の機能と同様に、それぞれの新しいアクティブなユーザ・ファイルについて、少なくとも1つの圧縮ストリーム(404、
図4)がストリームベースの圧縮モジュール内で開始される。こうしたそれぞれのストリームについて、現行の書き込みオフセット(オフセット)がメモリ(540、
図2)内で保持および維持される。オフセットは、ストリーム(404、
図4)内に書き込まれた、ユーザ・ファイル302内の最後のオフセットを表す。新しい書き込み動作がユーザから受信されると必ず、新しい書き込み動作に対してメモリ・バッファ640が割り振られ、メモリ・バッファ640内にデータが格納される。断片マップ(620、
図3)は、新しい関連を反映するように更新される。現行の書き込みオフセットに隣接する断片の準備が整うと必ず、断片は圧縮ストリーム404内に書き込まれ、それに応じて現行の書き込みオフセットが前進する。これで書き込まれた断片のメモリ・バッファ640は、空き状態となることができる。
【0037】
一実施形態では、単なる例として、メモリ・バッファ640が不足した場合、およびメモリ内で断片の十分大きなシーケンスが使用可能な場合、本発明は新しいストリーム404を開始し、断片のシーケンスをストリーム440に書き込む。ストリーム44に断片のシーケンスを書き込むことによって、メモリ・バッファ640は解放される。前述の「十分大きなシーケンス」とは、所定のしきい値よりも長い、書き込まれた断片のシーケンスとして定義される。効率を上げるために、このしきい値は、依然として使用可能なメモリ・バッファ640の数に依存するように決定することができる。いくつかの使用可能なメモリ・バッファ640が存在する場合、断片は非常に大きいものとすることが可能であり、メモリ・バッファ640が少なくなった場合、断片は小さくすることが可能である。
【0038】
上書きが発生した場合(すなわちユーザが、オンディスクまたはメモリ内のいずれかで、すでに「古い」データが存在するユーザ・ファイル302内の領域に書き込んだ場合)、新しいストリーム404は上書きのために開始され、ディスク・マップは単に新しいデータを指示するように更新される。しかしながら、多くのストリーム全体にわたってユーザ・ファイル302を断片化することが可能であり、「古い」、すなわち、他の圧縮ストリーム404内の他の場所に保持されている新しいデータによって上書きされたデータが、圧縮されたストリーム404内に存在する可能性がある。
【0039】
一実施形態では、これらの問題点は、各ユーザ・ファイル302が閉じられた後に、ユーザ・プリファレンスによって決定された任意の期間、または複数のユーザ・ファイルが休止状態であると判別された場合に実行する、断片化解除プロセスを含むことによって解決される。断片化解除動作は、(可能な限り多くの)各ユーザ・ファイルの圧縮ストリーム404を、単一の圧縮ストリームに再配置構成し、上書きされた不要な部分を廃棄する。
【0040】
図5に進むと、本発明の実装のための例示的方法500を示す流れ図が示されている。方法500が開始され(ステップ501)、クライアント/バックアップ・アプリケーションが書き込みコマンドを発行する(ステップ502)。方法500は、不連続データを受信すること(ステップ503)を含み、メモリ・バッファ内にデータを格納する実装を開始する(ステップ504)。方法500は、ストリームベースのアルゴリズム内で十分に連続して使用されるようにデータを順次再構築し(ステップ505)、ストリームベースの圧縮モジュールを使用するストリームベースのアルゴリズムによって、連続データを渡す(ステップ506)。次に方法500は、重複排除されたデータを格納して(ステップ508)、終了する(ステップ510)。
図5は、図に示された流れ図の形で提示されているが、これらの機能ブロックのうちの任意数の実装が(たとえばより複雑なフローの一部として、または他の順序などで)企図されることに留意されたい。たとえば、ストリームベースのアルゴリズム内で十分に連続して使用されるようにデータを順次再構築するブロック505を実装し、別々に、より複雑なフローまたはプロセスで実行することができる。また、ストリームベースの圧縮モジュールを使用するストリームベースのアルゴリズムによって連続データを渡すことを記載したブロック506を、より複雑なプロセスで、
図5に示した順序とは異なる順序で実行することができる。
【0041】
図6に進むと、重複排除ストレージ・サブシステムの実装のための例示的方法700を示す流れ図が提示されている。方法700が開始され(ステップ702)、NASから書き込み動作を受信する(ステップ704)。方法700は、NASプロトコル(NFSまたはCIFS)を介して書き込み動作要求を受信すると、書き込み動作要求に従って動作および実行し、複数のバッファ内にデータを格納して、断片マップを更新する(ステップ705)。方法700は、書き込み動作要求が、既存のオープン・ストリームの最後に隣接するシーケンスを完了したかどうかを判別し(ステップ706)、完了した場合は、既存のストリームにデータを書き込んで(708)、終了する(ステップ736)。完了していない場合、方法700は、使用可能な空きバッファの数が、あるしきい値より少ないかどうかを判別する(ステップ716)。しきい値は、ユーザ、使用可能な空きバッファの数、バッファの合計数、およびメモリ階層によって決定することができるが、これらに限定されるものではない。しきい値より少なくない場合、方法700は、メモリ内にある最大の完全なシーケンスを見つけることになり、新しいストリームを開始して、メモリにデータを書き込み、ディスク・マップを更新し(718)、方法は終了する(ステップ736)。しきい値より少ない場合、方法700は、検出された上書き(すなわち、任意の以前の書き込み動作のファイル・オフセットで上書きする書き込み動作)が存在するかどうかをチェックする(ステップ728)。上書きが存在する場合、追加のストリームが作成され、そのストリームを既存のストリームの上に重ねて、ディスク・マップに記録し(ステップ730)、方法700は終了する(ステップ736)。上書きが存在しない場合、方法700は終了する(ステップ736)。
【0042】
例示的一実施形態では、書き込み動作が、既存のストリームの(論理的な)最後に隣接するNASを介して受信された場合、第1に、書き込み動作データ要求が既存のストリームの最後に添付される場合があり、第2に、書き込み動作が完了した可能性のある任意の後続のシーケンスが添付される場合があるという、2つのイベントが発生する可能性があることに留意されたい。一時ストレージ領域は不要な可能性がある。一時ストレージ領域が実装、適合、または使用されない場合、ストリームベースのアルゴリズムに送信されるシーケンスは、より小さく、サイズが縮小されている可能性がある。
【0043】
特許請求の範囲、説明、および図面に示された、デバイス、システム、プログラム、および方法内の動作、手続き、ステップ、およびステージなどの、プロセスの実行順序は、「前」および「先立って」などの表現を使用して、特に明確には指定されていないことに留意されたい。したがって、それらのプロセスは、先行するプロセスからの出力が後続のプロセスで使用されない限り、任意の順序で実行可能である。たとえ、特許請求の範囲、説明、または図面内のいずれかの動作フローが、便宜上「第1に」および「続いて」などの表現を使用して記述されている場合であっても、これは必ずしも、動作フローがこれらの表現によって示された順序で実行されなければならないことを意味するものではない。
【0044】
当業者であれば理解されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム製品として具体化することができる。したがって本発明の諸態様は、完全なハードウェア実施形態、完全なソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または、本明細書ではすべて全体として「回路」、「モジュール」、または「システム」と呼ばれる場合のあるソフトウェアとハードウェアの諸態様を組み合わせた実施形態の形を取ることができる。さらに本発明の諸態様は、その上にコンピュータ読み取り可能プログラム・コードが具体化された1つまたは複数のコンピュータ読み取り可能メディア内に具体化された、コンピュータ・プログラム製品の形を取ることができる。
【0045】
1つまたは複数のコンピュータ読み取り可能メディアの任意の組み合わせが使用可能である。コンピュータ読み取り可能メディアは、コンピュータ読み取り可能信号メディアまたはコンピュータ読み取り可能ストレージ・メディアとすることができる。コンピュータ読み取り可能ストレージ・メディアは、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいはそれらの任意の好適な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ読み取り可能ストレージ・メディアのより特定の例(非網羅的リスト)は、1本または複数本のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはFlash(R)メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光ストレージ・デバイス、磁気ストレージ・デバイス、またはそれらの任意の好適な組み合わせを含む。本明細書との関連において、コンピュータ読み取り可能ストレージ・メディアは、命令実行のシステム、装置、またはデバイスによって、またはそれらに関連して使用するためのプログラムを、含むかまたは格納することが可能な、任意の有形メディアとすることができる。
【0046】
コンピュータ読み取り可能メディア上に具体化されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、RFなど、またはそれらの任意の好適な組み合わせを含むがこれらに限定されない、任意の適切なメディアを使用して伝送可能である。本発明の諸態様に関する諸動作を実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および、「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、完全にリモート・コンピュータまたはサーバ上で、実行可能である。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続可能であるか、あるいは、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータへの接続が実行可能である。
【0047】
以上、本発明の諸態様について、本発明の諸実施形態に従った方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図あるいはブロック図またはその両方を参照しながら説明した。流れ図あるいはブロック図またはその両方の各ブロック、および流れ図あるいはブロック図またはその両方内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることを理解されよう。これらのコンピュータ・プログラム命令は、マシンを製造するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラム可能データ処理装置へと提供可能であるため、結果として、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施するための手段を作成することになる。
【0048】
コンピュータ読み取り可能メディア内に格納された命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施する命令を含む製品を製造するように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対して、特定の様式で機能するように命令可能な、これらのコンピュータ・プログラム命令を、コンピュータ読み取り可能メディア内に格納することも可能である。コンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能装置上で実行する命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施するためのプロセスを提供するように、コンピュータ、他のプログラム可能装置、または他のデバイス上でコンピュータ実装プロセスを生成するように一連の動作ステップを実行させるために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にロードすることも可能である。
【0049】
上記図面内の流れ図およびブロック図は、本発明の様々な諸態様に従ったシステム、方法、およびコンピュータ・プログラム製品の、可能な実装のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を備える、モジュール、セグメント、またはコードの一部を表すことができる。一部の代替実装では、ブロック内に示された機能が、図面内に示された順序以外で発生する可能性があることにも留意されたい。たとえば、連続して示された2つのブロックは、実際にはほぼ同時に実行可能であるか、または、ブロックは関連する機能に依存して逆の順序で実行可能である。ブロック図あるいは流れ図またはその両方の各ブロック、および、ブロック図あるいは流れ図またはその両方内のブロックの組み合わせは、指定された機能または動作を実行する特定用途向けハードウェアベース・システム、あるいは特定用途向けハードウェアとコンピュータ命令との組み合わせによって、実装可能であることにも留意されよう。
【0050】
以上、本発明の1つまたは複数の実施形態について詳細に説明してきたが、当業者であれば、これらの諸実施形態に対する修正および適合が、以下の特許請求の範囲に示された本発明の範囲を逸脱することなく実行可能であることを理解されよう。