以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。本実施形態で開示される複数の特徴は、様々に組み合わせることができる。
なお、本明細書では、実施形態において使用される情報を、「aaa表」という表現で説明しているが、これに限らず、例えば、「aaaリスト」、「aaaデータベース」、「aaaキュー」等の他の表現を用いてもよい。本実施形態で用いられる情報が、データ構造に依存しないことを示すために、「aaa情報」と呼ぶこともある。
本実施形態で使用される情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いることがあるが、これらは互いに置換が可能である。
さらに、本実施形態の処理動作の説明では、「コンピュータプログラム」を動作主体(主語)として説明することがある。コンピュータプログラムは、マイクロプロセッサによって実行される。従って、プロセッサを動作主体として読み替えても良い。
図1は、本実施形態の全体概要を示す説明図である。図1には、左側上部に示す1つの実施形態(1)と、左側の下部に示す他の一つの実施形態(2)との2つの形態が示されている。
本実施形態の階層化ストレージシステムは、エッジ側に配置される第1ファイル管理装置1と、コア側に配置される第2ファイル管理装置2とで、ファイルを階層化して管理している。エッジ側とは、ユーザサイト側の意味である。コア側とは、ユーザサイトから離れた側であり、例えば、データセンタ等が該当する。
ユーザは、「ユーザ端末」としてのホストコンピュータ(ホストと略記)を介して、エッジ側のファイル管理装置1にアクセスし、所望のファイルに読み書きしたり、新たなファイルを作成したりすることができる。ホストは、コア側のファイル管理装置2内のファイルに直接アクセスすることはできない。
ユーザの使用頻度の少ないファイルは、後述するように、シングルインスタンス処理の対象となる。さらに、最終アクセス日時から所定時間の経過したファイルは、後述するスタブ化処理の対象となる。スタブ化処理を行う前の前提として、後述するレプリケーション処理が実行される。
管理装置3は、階層化ストレージシステムを管理するためのコンピュータであり、例えば、各ファイル共有装置1、2とは別の独立したコンピュータとして設けてもよいし、エッジ側のファイル管理装置1内に設けてもよい。
管理装置3は、例えば、レプリケーション処理部3Aと、「重複排除処理部」としてのシングルインスタンス処理部3Bと、スタブ化処理部3Cと、ファイルアクセス受付部3Dとを備える。なお、図中では、「処理部」を「部」と略記する。
シングルインスタンス処理部3Bは、重複したファイルを検出して、1つにまとめて管理する。シングルインスタンス処理の詳細は後述するが、先に簡単に説明する。シングルインスタンス処理部3Bは、使用頻度の低下したファイルを候補ファイルとして抽出し、候補ファイルと既存のクローン元ファイルとを比較する。
クローン元ファイルとは、「基準ファイル」に該当し、データの参照先となるファイルである。候補ファイルとクローン元ファイルとが一致する場合、シングルインスタンス処理部3Bは、候補ファイルのデータを削除し、候補ファイルの参照先としてクローン元ファイルを設定する。これにより、候補ファイルは、クローンファイルに変換される。クローンファイルとは、必要に応じてクローン元ファイルのデータを参照するファイルであり、「参照元ファイル」に該当する。これにより、同一のデータが複数のファイルにそれぞれ記憶されるのを防止し、記憶領域を効率的に使用することができる。なお、本実施形態では、ブロックデータ単位で重複を排除できるようになっている。
スタブ化処理部3Cは、スタブ化処理を実行するための機能である。スタブ化処理の詳細は後述するが、先に簡単に説明する。まず前提として、レプリケーション処理部3Aの働きにより、エッジ側のファイル管理装置1とコア側のファイル管理装置2とに同一のファイルがそれぞれ格納されている。
エッジ側のファイル管理装置1の空き容量が少なくなると、スタブ化処理部3Cは、エッジ側のファイル管理装置1に記憶されているファイル群のうち、使用頻度の低いファイルから順番にスタブ化対象として選択する。スタブ化対象として選択されたファイルは、そのデータが削除される。スタブ化されたファイルと同一のデータを有するファイルは、コア側のファイル管理装置2に存在する。従って、ホストがスタブ化ファイルにアクセスする場合、コア側のファイル管理装置2に記憶されているレプリケーションファイルからデータが読み出されて、エッジ側のファイル管理装置1に転送される。スタブ化ファイルのデータを取り戻す処理を、本実施形態ではリコール処理と呼ぶ。
ファイルアクセス受付部3Dは、ホストからのファイルアクセス要求を受け付けて、要求内容に応じた所定の処理を実行する。ファイルアクセス要求としては、例えば、リード要求、ライト要求、コピー要求、削除要求などがある。
ホストからファイルコピーが要求されると、ファイルアクセス受付部3Dは、要求されたファイル(コピー元ファイルをコピーしたファイル)を、クローンファイルとして作成する。或るファイルをコピーするということは、コピー元ファイルとコピーファイルとの間でデータが重複することを意味する。そこで、本実施形態では、後述のように、シングルインスタンス処理部3Bを用いて、コピー元ファイルをクローンファイルに変換し、そのクローンファイルをコピーする。
図1の上側に示す実施形態(1)では、エッジ側のファイル管理装置1内で、シングルインスタンス処理が実行されており、一つのクローン元ファイルと、そのクローン元ファイルを参照する複数のクローンファイルとが格納されている。エッジ側のファイル管理装置1内のクローンファイルは、基準となるクローン元ファイルと重複するデータについてはクローン元ファイルのデータを使用し、クローン元ファイルと異なるデータ(差分データ)については保持する。つまり、クローンファイルは、クローン元ファイルと異なる差分データのみを保持する。
コア側のファイル管理装置2に着目する。コア側のファイル管理装置2には、エッジ側のファイル管理装置1に格納された複数のファイルの複製(レプリケーションファイル)が格納されている。但し、エッジ側のファイル管理装置1に格納されたファイルがクローンファイルであったとしても、コア側のファイル管理装置2には、通常のファイルと同様に完全なデータを有するファイル(具体的には、差分データのみならずクローン元ファイルと重複するデータについても有するファイル)が作成され、当該クローンファイルの複製として格納されている。
実施形態(1)によれば、エッジ側のファイル管理装置1の記憶領域を有効に利用できるため、エッジ側のファイル管理装置1により多くのファイルを格納できる。従って、ホストからのアクセス要求に対して速やかに応答でき、ユーザの使い勝手が向上する。
しかし、クローンファイルの複製を作成するために、エッジ側のファイル管理装置1からコア側のファイル管理装置2にクローンファイルのデータを転送する場合、クローンファイルの差分データとクローン元ファイルの基準データの両方を、コア側のファイル管理装置2に転送する必要がある。
図1には、クローンファイルFa、Fbの2つが示されている。一方のクローンファイルFaについては、データ「5」、「2」、「3」、「4」の4個のブロックデータが、エッジ側のファイル管理装置1からコア側のファイル管理装置2に転送される。同様に、他方のクローンファイルFbについては、データ「1」、「2」、「6」、「4」の4個のブロックデータが、エッジ側のファイル管理装置1からコア側のファイル管理装置2に転送される。
従って、エッジ側のファイル管理装置1からコア側のファイル管理装置2に、重複したデータ転送(上記の例では、データ「2」、「4」の転送)が行われることになる。このため、レプリケーション処理のための転送サイズが大きくなり、転送時間も長くなり、通信経路も混雑する。さらには、コア側のファイル管理装置2で重複排除処理(シングルインスタンス処理)が適用されていない場合には、コア側のファイル管理装置2の記憶領域を、効率的に使用することができない。クローンファイルの複製もは通常のファイルと同様に全てのデータを有するファイルとしてコア側のファイル管理装置2に保持されるためである。
そこで、クローン元ファイルの複製もコア側のファイル管理装置2に作成し、クローン元ファイルとクローンファイルとの重複データを排除することが考えられる。つまり、エッジ側のファイル管理装置1からコア側のファイル管理装置2に、クローン元ファイルのデータとクローンファイルの差分データのみを転送する構成とすれば重複したデータ転送を無くすことができるので、コア側のファイル管理装置2に複排除処理(シングルインスタンス処理)が適用されていない場合でも、コア側のファイル管理装置2の記憶領域を、効率的に使用することができる。
しかし、クローン元ファイルの複製をコア側のファイル管理装置2に作成すると、クローン元ファイルもスタブ化処理の対象となる。クローン元ファイルは、一つまたは複数のクローンファイルから参照される、基準となるファイルであるため、ユーザが直接アクセスできないように管理される。
一般的に古いファイルから順番にスタブ化処理の対象となるため、ユーザからアクセスされないクローン元ファイルは、ユーザからアクセス可能なクローンファイルよりも先に、スタブ化処理の対象となり易い。
クローン元ファイルがスタブ化されてしまい、エッジ側のファイル管理装置1にデータが残らなくなると、そのクローン元ファイルを参照する全てのクローンファイルの応答性が悪化する。参照すべきデータを、コア側のファイル管理装置2からエッジ側のファイル管理装置1にWAN等を介して取得する必要があるためである。リコール処理の完了後、しばらくの間は、クローンファイルの応答性は改善される。しかし、やがてクローン元ファイルがスタブ化されると、クローンファイルの応答性が再び低下する。
このように、クローン元ファイルを参照するクローンファイルが頻繁に使用されたとしても、そのクローンファイルにデータを提供するクローン元ファイルは使用頻度が少ないと判断されて、スタブ化対象となる。
そこで、図1の左側下部に示す実施形態(2)では、クローン元ファイルの使用頻度を適切に評価して、クローン元ファイルのスタブ化処理を実行する。実施形態(2)では、クローン元ファイルのスタブ化の可否を判定するための指標値を、そのクローン元ファイルを参照する各クローンファイルの指標値に基づいて推定する。例えば、実施形態(2)では、クローン元ファイルの最終アクセス日時を、そのクローン元ファイルを参照する各クローンファイルの最終アクセス日時の平均値として算出する。
実施形態(2)によればmコア側のファイル管理装置2内にも、シングルインスタンス化されたファイルを格納できるため、コア側のファイル管理装置2の記憶領域を有効に使用できる。さらに、エッジ側のファイル管理装置1からコア側のファイル管理装置2には、クローン元ファイルのデータと各クローンファイルの保持する差分データとを送信するだけでよいため、転送データのサイズを小さくでき、通信混雑を招かない。
さらに、クローン元ファイルの使用頻度を適切に評価するため、クローン元ファイルがクローンファイルよりもいち早くスタブ化されるのを抑制できる。この結果、クローンファイルの応答性を維持して、ユーザの使い勝手が低下するのを防止できる。
図2は、階層化ストレージシステムの全体構成を示すハードウェア構成図である。図3は、階層化ストレージシステムのソフトウェア構成図である。先に図1との対応関係を述べると、「第1ファイル管理装置」としてのファイルストレージ装置10は図1のエッジ側ファイル管理装置1に、「第2ファイル管理装置」としてのアーカイブ装置20は図1のコア側のファイル管理装置2に、「ユーザ端末」としてのホスト12は図1のホストに、それぞれ対応する。
図1の管理装置3は、主に、ファイルストレージ装置10の機能として設けられる。より詳しくは、管理装置3の果たす機能は、ファイルストレージ装置10内のソフトウェア群とアーカイブ装置20内のソフトウェア群との協働により実現される。
エッジ側のサイトST1の構成を説明する。エッジ側サイトST1は、ユーザ側に設けられるもので、例えば、事業所または支店ごとに設けられる。エッジ側サイトST1には、例えば、少なくとも一つのファイルストレージ装置10と、少なくとも一つのRAID(Redundant Arrays of Inexpensive Disks)システム 11と、少なくとも一つのホストコンピュータ(またはクライアント端末)12とが設けられている。
エッジ側サイトST1とコア側サイトST2とは、例えば、WAN等のサイト間通信ネットワークCN1を介して接続される。ファイルストレージ装置10とホストコンピュータ(以下ホスト)12とは、例えば、LAN(Local Area Network)のようなサイト内通信ネットワークCN2を介して接続される。ファイルストレージ装置10とRAIDシステム11とは、例えば、FC−SAN(Fibre Channel-Storage Area Network)、または、IP−SAN(Internet Protocol_SAN)のような通信ネットワークCN3を介して接続される。なお、これら通信ネットワークCN1、CN2、CN3のうちの複数または全てを共通の通信ネットワークとして構成してもよい。
ファイルストレージ装置10は、例えば、メモリ100と、マイクロプロセッサ(図中CPU:Central Processing Unit)101と、NIC(Network Interface Card)102と、HBA(Host Bus Adapter)103とを備える。
CPU101は、メモリ100に格納された所定のコンピュータプログラムP100〜P106を実行することで、後述する所定の機能を実現する。メモリ100は、主記憶メモリ、フラッシュメモリ装置、ハードディスク装置などを含むことができる。メモリ100の記憶内容は後述する。
NIC102は、ファイルストレージ装置10が通信ネットワークCN2を介してホスト12と通信したり、ファイルストレージ装置10が通信ネットワークCN1を介してアーカイブ装置20と通信したりするための通信インターフェース回路である。HBA103は、ファイルストレージ装置10がRAIDシステム11と通信するための通信インターフェース回路である。
RAIDシステム11は、ファイルストレージ装置10により管理されるファイル群のデータをブロックデータとして管理する。RAIDシステム11は、例えば、チャネルアダプタ(CHA)110と、ディスクアダプタ(DKA)111と、記憶装置112とを備える。CHA110は、ファイルストレージ装置10との間の通信を制御するための通信制御回路である。DKA111は、記憶装置112との間の通信を制御するための通信制御回路である。CHA110とDKA111とが協働することで、ファイルストレージ装置10から入力されたデータが記憶装置112に書き込まれたり、記憶装置112から読み出されたデータがファイルストレージ装置10に転送されたりする。
記憶装置112は、例えば、ハードディスク装置、フラッシュメモリ装置、FeRAM(Ferroelectric Random Access Memory)、MRAM(MagnetoresistiveRandom Access Memory)、相変化メモリ(Ovonic Unified Memory)、RRAM(Resistance RAM:登録商標)等のように構成される。
ホスト12の構成を説明する。ホスト12は、例えば、メモリ120と、マイクロプロセッサ121と、NIC122及び記憶装置123を備える。ホスト12は、サーバコンピュータのように構成することもできるし、パーソナルコンピュータまたは携帯情報端末(携帯電話を含む)のように構成することもできる。
メモリ120及び/または記憶装置123には、後述するアプリケーションプログラムP120等が格納される。CPU121は、アプリケーションプログラムを実行し、ファイルストレージ装置10で管理されているファイルを使用する。ホスト12は、NIC122を介して、ファイルストレージ装置10と通信する。
コア側サイトST2を説明する。コア側サイトST2は、例えば、データセンタ等に設けられる。コア側サイトST2は、アーカイブ装置20と、RAIDシステム21とを備えている。アーカイブ装置20とRAIDシステム21とは、サイト内通信ネットワークCN4を介して接続されている。
RAIDシステム21は、エッジ側のRAIDシステム11と同様の構成である。コア側のCHA210、DKA211、記憶装置212は、エッジ側のCHA110、DKA111、記憶装置112にそれぞれ対応するため、説明を省略する。
アーカイブ装置20は、ファイルストレージ装置10で管理されているファイル群をバックアップするためのファイルストレージ装置である。アーカイブ装置20は、例えば、メモリ200と、マイクロプロセッサ201と、NIC202と、HBA203とを備えている。それらメモリ200、マイクロプロセッサ201、NIC202、HBA203は、ファイルストレージ装置10のメモリ100、マイクロプロセッサ101、NIC102、HBA103と同様のため、説明を省略する。ファイルストレージ装置10とアーカイブ装置20とは、ハードウェア構成は似ているが、ソフトウェア構成は異なる。
図3を参照する。先にエッジ側サイトST1のソフトウェア構成を説明する。ファイルストレージ装置10は、例えば、ファイル共有プログラムP100と、データムーバープログラムP101と、ファイルシステムプログラム(図中、FSと略記)P102と、カーネル及びドライバ(図中、OSと略記)P103を備える。さらに、ファイルストレージ装置10は、例えば、受付プログラムP104(図7参照)と、抽出プログラムP105(図8参照)と、重複検出プログラムP106(図8参照)とを備える。
各プログラムの動作は、後述するが、簡単に説明すると、ファイル共有プログラムP100は、例えば、CIFS(Common Internet File System)またはNFS(Network File System)のような通信プロトコルを使用して、ホスト12にファイル共有サービスを提供するためのソフトウェアである。データムーバープログラムP101は、後述するレプリケーション処理、ファイル同期処理、スタブ化処理、リコール処理を実行するためのソフトウェアである。ファイルシステムとは、ボリューム114上に、ファイルという管理単位を実現するために構築された論理構造である。ファイルシステムプログラムP102とは、ファイルシステムを管理するソフトウェアである。
カーネル及びドライバP103は、ファイルストレージ装置10の全体を制御するソフトウェアである。カーネル及びドライバP103は、例えば、ファイルストレージ装置10上で動作する複数プログラム(プロセス)のスケジュールを制御したり、ハードウェアからの割り込みを制御したりする。
受付プログラムP104は、ホスト12からのファイルアクセス要求を受け付けて所定の処理を行い、その結果を返すソフトウェアである。抽出プログラムP105は、シングルインスタンス処理を適用するシングルインスタンス候補を抽出するためのソフトウェアである。重複検出プログラムP106は、抽出されたシングルインスタンス候補について、シングルインスタンス処理を行うためのソフトウェアである。
RAIDシステム11は、OS等を格納した論理ボリューム113と、ファイルのデータを格納するための論理ボリューム114とを備えている。複数の記憶装置112の物理的記憶領域を一つにまとめ、その物理的記憶領域から所定サイズの記憶領域を切り出すことで、論理的記憶装置である論理ボリューム113、114を作成できる。
ホスト12は、例えば、アプリケーションプログラム(以下、アプリケーションと略記)P120と、ファイルシステムプログラムP121と、カーネル及びドライバP122とを備えている。アプリケーションP120は、例えば、文書作成プログラム、顧客管理プログラム、データベース管理プログラム等のように構成される。
コア側サイトST2のソフトウェア構成を説明する。アーカイブ装置20は、例えば、データムーバープログラムP201と、ファイルシステムP202と、カーネル及びドライバP203とを備える。これらソフトウェアの役割は必要に応じて後述する。
RAIDシステム21は、RAIDシステム11と同様に、例えば、OS等を格納した論理ボリューム213と、ファイルのデータを記憶するための論理ボリューム214とを備える。それらの説明は省略する。
図4は、ファイルシステムとiノード管理テーブルT10との関係を簡略化して示す説明図である。図4の上側に示すように、ファイルシステムは、例えば、スーパーブロックと、iノード管理テーブルT10と、データブロックなどから構成される。
スーパーブロックとは、例えば、ファイルシステムのサイズ及びファイルシステムの空き容量のような、ファイルシステムの管理情報を一括して保持するための領域である。iノード管理テーブルT10は、各ファイルに設定されたiノードを管理するための管理情報である。
ファイルシステムでは、各ディレクトリまたはファイルのそれぞれについて、1つずつのiノードを対応させて管理する。iノード管理テーブルT10の各エントリのうち、ディレクトリ情報のみ含むエントリを、ディレクトリエントリと呼ぶ。ディレクトリエントリを用いてファイルパスを辿ることで、目的のファイルが格納されているiノードにアクセスすることができる。例えば、図4に示すように、「/home/user-01/a.txt」を辿る場合、iノード#2→iノード#10→iノード#15→iノード#100の順に辿っていくことで、目的のファイルのデータブロックにアクセスすることができる。
ファイルの実体が格納されているiノード(図4の例では「a.txt」)は、例えば、ファイルの所有権、アクセス権、ファイルサイズ、データ格納位置などの情報を有する。図4の下側には、iノードとデータブロックの参照関係が示されている。図4中のデータブロックに添えられた数字100、200、250は、ブロックアドレスを示す。アクセス権の項目に表示されている「u」はユーザ、「g」はグループ、「o」はユーザ以外の者、のそれぞれの略である。また、アクセス権の項目に示されている「r」はread、「x」はexecute、「w」はwrite、のそれぞれの略である。最終アクセス日時は、西暦(4桁)と月日と時分秒の組合せとして記録される。
図5は、iノードがiノード管理テーブルに格納された状態を示す。図5では、iノード番号「2」と「100」を例に挙げて示している。
図6は、本実施例においてiノード管理テーブルT10に追加された部分の構成を示す説明図である。iノード管理テーブルT10は、例えば、iノード番号C100と、所有者C101と、アクセス権C102と、サイズC103と、最終アクセス日時C104と、ファイル名C105と、拡張部分C106と、データブロックアドレスC107とを備えている。
拡張部分C106は、本実施例のために追加された特徴的部分であり、例えば、参照先iノード番号C106Aと、レプリケーション済フラグC106Bと、スタブ化フラグC106Cと、リンク先C106Dと、参照カウントC106Eとを含む。
参照先iノード番号C106Aは、データの参照先のiノードを特定するための情報である。クローンファイルの場合は、参照先iノード番号C106Aに、クローン元ファイルのiノード番号が設定される。クローン元ファイルの場合は、参照先iノード番号C106Aに値は設定されない。参照先が存在しないためである。
レプリケーション済フラグC106Bは、レプリケーション処理が終了したか否かを示す情報である。レプリケーション処理が終了して、アーカイブ装置20に複製が作成された場合は、レプリケーション済フラグにONが設定される。レプリケーション処理がされていない場合、即ち、アーカイブ装置20に複製が生成されていない場合は、レプリケーション済フラグはOFFに設定されている。
スタブ化フラグC106Cは、スタブ化処理が行われたか否かを示す情報である。スタブ化処理が実施されて、スタブ化ファイルに変換された場合、スタブ化フラグにはONが設定される。スタブ化ファイルに変換されていない場合、スタブ化フラグにはOFFが設定される。
リンク先C106Dは、アーカイブ装置20内の複製ファイルを参照するためのリンク情報である。レプリケーション処理が完了している場合に、リンク先C106Dに値が設定される。ファイルストレージ装置10は、リコール処理等を行う場合、リンク先C106Dを参照することで、アーカイブ装置20から複製ファイルのデータを取得することができる。
参照カウントC106Eは、クローン元ファイルの寿命を管理する情報である。参照カウントC106Eの値は、クローン元ファイルを参照するクローンファイルが作成されるたびに1つ増加する。従って、例えば、5個のクローンファイルから参照されているクローン元ファイルの参照カウントC106Eには、「5」が設定される。
参照カウントC106Eの値は、クローン元ファイルを参照するクローンファイルが削除またはスタブ化されると、1つ減少する。従って、前記の例で言えば、1つのクローンファイルが削除され、かつ、他の1つのクローンファイルがスタブ化された場合、参照カウントC106Eの値は「3」となる。そして、参照カウントC106Eの値が0になった場合、クローン元ファイルは削除される。本実施例では、クローン元ファイルを参照するクローンファイルが無くなった場合に、そのクローン元ファイルを削除して、空き領域を増やす。
図7は、レプリケーション処理の概要を示す。レプリケーション処理の詳細は、図26で後述する。
ファイルストレージ装置10のデータムーバープログラムP101は、定期的に、レプリケーション要求を受領する(S10)。レプリケーション要求は、例えば、ホスト12から発行される。レプリケーション要求には、例えば、レプリケーション対象のファイル名などが含まれている。
データムーバープログラムP101は、レプリケーション対象のファイルデータを取得すべく、受付プログラムP104にリード要求を発行する(S11)。受付プログラムP104は、RAIDシステム11内の正ボリューム(コピー元である論理ボリューム)114から、レプリケーション対象ファイルのデータを読出して、データムーバープログラムP101に渡す(S12)。
データムーバープログラムP101は、取得したファイルのデータ及びメタデータを、アーカイブ装置20のデータムーバープログラムP201に送信する(S13)。アーカイブ装置20のデータムーバープログラムP201は、アーカイブ装置20の受付プログラムP204にライト要求を発行する(S14)。受付プログラムP204は、RAIDシステム副ボリューム(コピー先の論理ボリューム)214に、ファイルストレージ装置10から取得したファイルを書き込む(S15)。なお、ファイルのデータブロックと共に送信されるメタデータとは、例えば、iノード管理テーブルT10である。
アーカイブ装置20に複製が作成されると、複製元のファイルのレプリケーション済フラグC106BはONに設定される。レプリケーション済フラグに代えて、レプリケーション済のファイル名などを記載したレプリケーション済ファイルのリストを用いて、レプリケーション済のファイルを管理する構成でもよい。
正ボリューム114内のレプリケーション元のファイルと副ボリューム214内の複製ファイルとは、ペアとして関連付けられる。レプリケーション元ファイルが更新された場合、ファイルがアーカイブ装置20に再転送される。これにより、ファイルストレージ装置10内のレプリケーション元ファイルとアーカイブ装置20内の複製ファイルとは、同期する。
本実施例では、ファイル同期処理の対象となるファイルを、リストで管理する。つまり、レプリケーション処理の済んでいるファイルが更新された場合、そのファイルはリストに記載される。ファイルストレージ装置10は、リストに記載されたファイルを、適当な時期を見計らって、アーカイブ装置20に転送する。リストに代えて、iノード管理テーブルT10に、同期の要否を示すフラグを追加してもよい。ファイルが更新された場合は、そのファイルの同期の要否フラグにONを設定し、ファイル同期処理が終了した場合は要否フラグをOFFに設定する。
図8は、シングルインスタンス処理の概要を示す。シングルインスタンス処理の詳細は、図28、図29、図30で後述する。
抽出プログラムP105は、一定期間アクセスされなかったファイル(例えば、一定期間更新されなかったファイル)を定期的に検索し、該当ファイルの名称を記載したリストT11を作成する(S20)。リストT11は、シングルインスタンス処理の適用候補となるファイルを管理するための情報である。
定期的に実行される重複検出プログラムP106は、リストT11に記載されたシングルインスタンス処理の候補ファイルと、既存のクローン元ファイルとを比較する。
候補ファイルと既存のクローン元ファイルとが一致する場合、重複検出プログラムP106は、候補ファイルのデータを削除する(S21)。重複検出プログラムP106は、候補ファイルのiノード管理テーブルT10の参照先iノード番号C106Aに、クローン元ファイルのiノード番号を設定する(S21)。これにより、その候補ファイルは、クローン元ファイルを参照するクローンファイルに変換される。
候補ファイルと既存のクローン元ファイルとが一致しない場合は、その候補ファイルに対応するクローン元ファイルを新たに作成する。重複検出プログラムP106は、候補ファイルのデータを削除し、かつ、新たに作成されたクローン元ファイルのiノード番号を、候補ファイルの参照先iノード番号C106Aに設定する。
図9は、クローン元ファイルの管理方法を示す説明図である。クローン元ファイルは、上述の通り、一つまたは複数のクローンファイルから参照されるデータを保持する重要なファイルである。従って、本実施例では、クローン元ファイルをユーザの誤操作等から保護するために、ユーザからアクセスできない特定のディレクトリ下で管理する。その特定のディレクトリを、本実施例ではインデックスディレクトリと呼ぶ。
インデックスディレクトリには、例えば、「1K」、「10K」、「100K」、「1M」のように、ファイルサイズのランク毎にサブディレクトリが設けられている。クローン元ファイルは、自身のファイルサイズに応じたサブディレクトリで管理される。クローン元ファイルのファイル名は、例えば、ファイルサイズとiノード番号の組合せとして生成される。
ファイルサイズ780バイト、iノード番号10のクローン元ファイルのファイル名は、「780.10」となる。同様に、ファイルサイズ900バイト、iノード番号50のクローン元ファイルのファイル名は「900.50」となる。それら2つのクローン元ファイル「780.10」、「900.50」は、1KB未満のクローン元ファイルを管理するためのサブディレクトリ「1KB」で管理される。
ファイルサイズ7000バイト、iノード番号3のクローン元ファイルは、ファイルサイズ1KB以上、かつ10KB未満のクローン元ファイルを管理するためのサブディレクトリ「10KB」で管理される。
このように、本実施例では、クローン元ファイルをファイルサイズ毎に分類してサブディレクトリに保管し、かつ、ファイルサイズとiノード番号の組合せをファイル名としている。従って、クローン候補のファイル(シングルインスタンス処理候補のファイル)と比較すべきクローン元ファイルを速やかに抽出することができ、照合処理を比較的短時間で完了することができる。
なお、ファイルサイズとiノード番号の組合せに代えて、例えば、ファイルサイズとハッシュ値の組合せ、または、ファイルサイズとiノード番号及びハッシュ値の組合せから、クローン元ファイルのファイル名を生成してもよい。ハッシュ値は、クローン元ファイルのデータをハッシュ関数に入力することで得られる値である。
図10は、シングルインスタンス処理の候補としてリストT11に記載されたファイルが、クローンファイルに変換される様子を示す。図10(a)の左側には、クローン候補のファイルNFが示されている。図10(a)の右側には、既存のクローン元ファイルOFが示されている。なお、図10では、便宜上、メタデータの一部を示す。
クローン候補ファイルNFとクローン元ファイルOFのデータとは、ともに「1234」であり、両方のデータは一致する。そこで、図10(b)に示すように、ファイルストレージ装置10は、クローン候補ファイルのデータを削除し、さらに、クローン候補ファイルの参照先iノード番号C106Aに、クローン元ファイルのiノード番号である「10」を設定する。これにより、クローン候補のファイルNFは、クローン元ファイルOFを参照するクローンファイルCFに変換される。クローンファイルのデータのうちクローン元ファイルと一致しているデータは、全てクローン元ファイルのデータが参照されるため、データブロック単位で重複データを排除できる。
図11は、クローンファイルが更新された場合を示す。ホスト12によりクローンファイルが更新され、クローン元ファイルのデータと部分的に一致しなくなった場合、クローンファイルは、クローン元ファイルとの差分データのみを保持する。図11の例では、クローンファイルの先頭の2つのデータブロックが「1」、「2」から「5」、「6」に更新されている。そこで、クローンファイルは、差分データである「5」、「6」のみを保持し、他のデータ「3」、「4」は引き続きクローン元ファイルを参照する。
なお、特に図示はしないが、クローン元ファイル及びクローンファイルのいずれか一方または両方を、ランレングス等のデータ圧縮方法を用いて圧縮してもよい。データ圧縮を行うことで、より一層、ファイルストレージ装置10の記憶領域を効率的に使用することができる。
図12〜図14を参照して、シングルインスタンス処理の応用例を幾つか説明する。図12〜図14では、エッジ側サイトの構成のみ示す。図12は、仮想デスクトップ環境に適用した場合である。
図12の例では、ホスト12は仮想化サーバとして構成されており、複数の仮想マシン1200を起動させている。クライアント端末13は、それぞれの仮想マシン1200を介して、ファイルを操作する。クライアント端末13は、例えば、補助記憶装置を備えないシンクライアント端末のように構成することができる。
ファイルストレージ装置10内のファイルシステムは、仮想マシン1200の起動ディスクイメージ(VM-image)をクローンファイルとして管理している。クローンファイル化された各起動ディスクイメージは、ゴールデンイメージ(GI)を参照する。各起動ディスクイメージとゴールデンイメージとの差分は、差分データ(DEF)としてそれぞれ管理される。
このように、シングルインスタンス処理を仮想デスクトップ環境に適用した場合、仮想マシンの起動デスクイメージのサイズを小さくできる。従って、多数の仮想マシン1200を生成した場合でも、全体としてのデータ格納領域を小さくことができる。
図13は、ドキュメント管理システムにシングルインスタンス処理を適用した場合の例を示す。ファイルストレージ装置10のファイルシステムは、複数のクライアント端末12により共有されている共有ドキュメントと、共有ドキュメントから派生した複数の関連ドキュメントとを管理する。
共有ドキュメントから派生した関連ドキュメントは、共有ドキュメントをクローン元ファイルとして参照するクローンファイルとなっている。このように、複数ユーザが、共有ドキュメントに基づいて関連ドキュメントを作成する場合に、関連ドキュメントをクローンファイルとして作成すれば、記憶領域を効率的に使用できる。
図14は、データベースシステムにシングルインスタンス処理を適用する場合を示す一例である。テスト用データベースサーバ12Aと、開発用データベースサーバ12Bと、本番用データベースサーバ12Cとが、それぞれデータベースプログラム1201を備えている。ユーザは、クライアント端末13を介して、各サーバ12A〜12Cのうち使用権限のあるサーバにアクセスし、データベースを使用する。
ファイルストレージ装置10のファイルシステムは、マスターテーブルと、マスターテーブルをコピーしたゴールデンイメージと、ゴールデンイメージを参照するクローンファイルとして作成されたクローンデータベースとを管理している。
テスト用データベースサーバ12A及び開発用データベースサーバ12Bの、データベース開発プログラム1201は、それぞれクローンファイルとして作成されたデータベースを使用する。クローンファイルとして作成されたデータベースとゴールデンイメージとの差分データは、クローンファイルとして作成されたデータベースに対応付けられて管理される。
このように、複数のクライアント端末13にデータベースアクセスを提供する場合に、クローンファイルとして作成されるデータベースをデータベースの用途毎に用意すれば、記憶領域を効率的に使用できる。
以上、シングルインスタンス処理の適用例を幾つか示したが、上記は一例に過ぎず、他の構成にも適用することができる。
図15は、スタブ化処理の概要を示す。データムーバープログラムP101は、一定時間毎に起動して正ボリューム114の空き容量を確認し、空き容量が閾値よりも少なくなった場合に、最終アクセス日時の古いファイルから順番にスタブ化する(S30)。
スタブ化するとは、対象ファイルをスタブ化ファイルにする処理を言う。スタブ化処理とは、ファイルストレージ装置10側のデータを消去し、アーカイブ装置20に有る複製ファイルのデータのみを残す処理である。ホスト12がスタブ化ファイルにアクセスすると、スタブ化ファイルのデータがアーカイブ装置20から読み出されて、ファイルストレージ装置10に保存される(リコール処理)。
図16は、クローン元ファイルの削除条件を示す。図6の参照カウントC106Eで説明したように、クローン元ファイルを参照先とするクローンファイルが作成されるたびに、クローン元ファイルの参照カウントC106Eの値は1つずつ増加する。これに対し、クローンファイルがスタブ化ファイルに変換されたり、クローンファイルが削除されたりすると、そのたびに参照カウントC106Eの値は1つずつ減少する。そして、参照カウントC106Eの値が0になった時点で、そのクローン元ファイルを直接参照するクローンファイルは1つも存在しないため、クローン元ファイルは削除対象となる。
図17は、受付プログラムP104によるリード要求処理の概要を示す。受付プログラムP104は、ホスト12からのリード要求を受け付けると(S40)、リード対象のファイルを正ボリューム114から取得する(S41)。
リード対象ファイルがスタブ化されており、正ボリューム114内にデータが存在しない場合、受付プログラムP104は、リコール処理を実施して、副ボリューム214からリード対象ファイルのデータを読み出す(S42)。受付プログラムP104は、アーカイブ装置20の副ボリューム214から読み出したデータを、正ボリューム114に格納した後で、ホスト12に転送する(S43)。
リード対象ファイルがリコール済みの場合、受付プログラムP104は、そのファイルデータを正ボリューム114から読み出して、ホスト12に転送する。複数のホスト12によってファイルストレージ装置10は共有されているため、先に受け付けられた他のアクセス要求によって、リード対象のスタブ化されたファイルがリコールされている場合がある。なお、リコール済であるか否かは、例えば、iノード管理テーブルT10のブロックアドレスC107の値が0であるか否かを確認すればわかる。リコール済の場合は、ブロックアドレスに0以外の値が設定されている。
図18は、受付プログラムP104によるライト要求処理の概要を示す。受付プログラムP104は、ホスト12からのライト要求を受け付けると(S44)、ライト対象ファイルがスタブ化ファイルに変換されているか否かを確認する(S45)。
ライト対象ファイルがスタブ化ファイルに変換されている場合、つまり、ライト対象ファイルがスタブ化されている場合、受付プログラムP104は、アーカイブ装置20からライト対象ファイルのデータを全て取得する。受付プログラムP104は、取得したデータをファイルストレージ装置10のファイルシステムに書き込み、ライト対象ファイルのスタブ化フラグC106CをOFFに設定する(S46)。
そして、受付プログラムP104は、ライト対象ファイルにライトデータを書き込み、さらに、ライト対象ファイルの名称を更新リストに記載する(S47)。ライト対象ファイルは、ライトデータが書き込まれて内容が変わってしまうため、ファイル同期の対象とする。なお、ライト対象ファイルがスタブ化されていない場合、上記のステップS46は省略されてステップS47が実行される。
図19は、ファイルのコピー処理の概要を示す。ファイルストレージ装置10を共同で使用するユーザは、ファイルストレージ装置10内のファイルを適宜再利用して、新たなファイルを作成することができる。
ファイルの再利用に際して、ファイルのコピーが行われる。通常のファイルのように全データをそのままそっくりコピーしてもよいが、その場合は、重複したデータがファイルストレージ装置10に格納されることになる。そこで、本実施例では、シングルインスタンス処理を用いて、ファイルコピー作成時の記憶容量を削減する。
受付プログラムP104は、ホスト12からのコピー要求を受け付けると(S48)、コピー元として選択されたファイル(図19のクローンファイル1)のコピー(クローンファイル2)を作成する(S49)。即ち、受付プログラムP104は、データをコピーすることなく、メタデータのみをコピーすることで、指定されたファイルのコピーを作成する。
コピー元ファイルとして指定されたファイルがクローンファイルではない場合(通常ファイルのような非クローンファイルの場合)、受付プログラムP104は、最初に、コピー元ファイルをクローンファイルに変換する。
次に、受付プログラムP104は、クローンファイルに変換されたコピー元ファイルのメタデータ(iノード管理テーブルT10)をコピーして一部を再利用することで、コピーファイル(クローンファイルである)を作成する。クローンファイルの数が増加するため、そのクローンファイルの参照先であるクローン元ファイルの参照カウントC106Eの値は1つ増加する。
図20は、受付プログラムP104により実行される、リード要求処理及びライト要求処理を示すフローチャートである。受付プログラムP104は、ホスト12からリード要求またはライト要求を受領すると、起動して以下の処理を実行する。
受付プログラムP104は、ホスト12が要求する対象ファイルのスタブ化フラグC106CがONに設定されているか否か判定する(S100)。スタブ化フラグがONに設定されていない場合(S100:NO)、対象ファイルはスタブ化ファイルに変換されていないため、後述する図21の処理に移行する。
対象ファイルのスタブ化フラグがONに設定されている場合(S100:YES)、受付プログラムP104は、ホスト12からの処理要求の種別がリード要求であるかライト要求であるかを判別する(S101)。
リード要求の場合(S101:read)、受付プログラムP104は、対象ファイルのiノード管理テーブルT10を参照し、ブロックアドレスが有効であるか判定する(S102)。
ブロックアドレスが有効な場合(S102:YES)、受付プログラムP104は、対象ファイルのデータを読み出して、要求元であるホスト12に送信する(S103)。ブロックアドレスが有効な場合、つまりブロックアドレスが0以外の値に設定されている場合は、対象ファイルがスタブ化ファイルに変換されていない。従って、リコール処理が不要である。
受付プログラムP104は、対象ファイルのiノード管理テーブルT10の最終アクセス日時C104の値を更新して、本処理を終了する(S105)。
対象ファイルのブロックアドレスが有効ではない場合(S102:NO)、受付プログラムP104は、データムーバープログラムP101に、リコール処理の実行を要求する(S104)。データムーバープログラムP101は、リコール処理を実行する。
受付プログラムP104は、アーカイブ装置20から取得された対象ファイルを、ホスト12に送信し(S104)、対象ファイルのiノード管理テーブルT10の最終アクセス日時C104の値を更新して、本処理を終了する(S105)。
ホスト12からの処理要求がライト要求の場合(S101:write)、受付プログラムP104は、データムーバープログラムP101に対して、リコール処理の実行を要求する(S106)。データムーバープログラムP101は、その要求に応えてリコール処理を実行する。
受付プログラムP104は、アーカイブ装置20から取得された対象ファイルにライトデータを書き込んで、ファイルのデータを更新する(S107)。さらに、受付プログラムP104は、対象ファイルのiノード管理テーブルT10の最終アクセス日時C104を更新する(S107)。
受付プログラムP104は、ライトデータで更新されたファイルのスタブ化フラグC106CにOFFを設定し、さらに、そのファイルのレプリケーション済フラグをONに設定する(S108)。受付プログラムP104は、ライトデータで更新されたファイルの名称を更新リストに記載して、本処理を終了する(S109)。
図21を参照する。ホスト12の処理対象ファイルのスタブ化フラグC106CにOFFが設定されている場合(S100:NO)、図23のステップS110に移る。受付プログラムP104は、ホスト12からの処理要求がリード要求であるかライト要求であるかを判別する(S110)。
リード要求の場合(S110:read)、受付プログラムP104は、リード対象ファイルがクローンファイルであるか判定する(S111)。リード対象ファイルがクローンファイルではない場合(S111:NO)、受付プログラムP104は、リード対象ファイルのiノード管理テーブルT10のブロックアドレスに従ってデータを読出し、そのデータをホスト12に送信する(S112)。受付プログラムP104は、リード対象ファイルの最終アクセス日時C104を更新する(S119)。
リード対象ファイルがクローンファイルの場合(S111:YES)、受付プログラムP104は、クローン元ファイルから取得したデータとリード対象のクローンファイルが保持している差分データとをマージして、ホスト12に送信する(S113)。受付プログラムP104は、リード対象ファイルであるクローンファイルの最終アクセス日時C104を更新する(S119)。
ホスト12からの処理要求がライト要求である場合(S110:write)、受付プログラムP104は、ライト対象ファイルがレプリケーション済であるかを判定する(S114)。
ライト対象ファイルがレプリケーション済の場合(S114:YES)、受付プログラムP104は、ライト対象ファイルの名称を更新リストに記載する(S115)。ライト対象ファイルはライトデータによって更新されるため、アーカイブ装置20内の複製と一致しなくなるためである。ライト対象ファイルがレプリケーション済ではない場合(S114:NO)、ステップS115はスキップされてステップS116に移る。
受付プログラムP104は、ライト対象ファイルがクローンファイルであるか判定する(S116)。ライト対象ファイルがクローンファイルではない場合(S116:NO)、受付プログラムP104は、ライト対象ファイルのブロックアドレスC107に基づいて、ライトデータをライト対象ファイルに書き込む(S117)。受付プログラムP104は、ライトデータを書き込んだライト対象ファイルの最終アクセス日時C104を更新する(S119)。
ライト対象ファイルがクローンファイルの場合(S116:YES)、受付プログラムP104は、ライトデータをクローンファイルのブロックアドレスに従って書き込む(S118)。受付プログラムP104は、クローン元ファイルのデータは更新せずに、クローンファイルについてのみデータを書き込む。これにより、ライト対象のクローンファイルは、クローン元ファイルのデータと異なる差分データを保持する(S118)。
図23は、受付プログラムP104により実行されるコピー処理を示すフローチャートである。受付プログラムP104は、ホスト12からコピー要求を受領すると、本処理を実行する。
受付プログラムP104は、コピー元として指定されたファイルのスタブ化フラグC106CがONに設定されているか判定する(S130)。コピー元ファイルのスタブ化フラグがONに設定されている場合(S130:YES)、受付プログラムP104は、コピー元ファイルのブロックアドレスが有効であるか判定する(S131)。コピー元ファイルがスタブ化ファイルに変換されている場合でも、他のアクセス要求によって、リコール処理が完了している場合がある。
コピー元ファイルのブロックアドレスが有効である場合(S131:YES)、受付プログラムP104は、そのブロックアドレスに従ってファイルデータ及びメタデータ(iノード管理テーブルT10)を取得する(S132)。
コピー元ファイルのブロックアドレスが有効ではない場合(S131:NO)、受付プログラムP104は、データムーバープログラムP101に対して、コピー元ファイルのデータに関するリコール処理の実行を要求する(S133)。
受付プログラムP104は、コピー元ファイルのファイルデータ及びメタデータを取得すると、コピー元ファイルのコピーを正ボリューム114内に作成する(S134)。このコピーファイルは、通常ファイル(非クローンファイル)である。
受付プログラムP104は、コピー元ファイルの最終アクセス日時C104を更新する(S135)。受付プログラムP104は、ステップS134で作成したコピーファイルについてレプリケーション処理が終了しているか判定する(S136)。レプリケーション処理が終了している場合(S136:YES)、本処理を終了する。
レプリケーション処理が終了していない場合(S136:NO)、受付プログラムP104は、データムーバープログラムP101に対して、レプリケーション処理の実行を要求する(S137)。
コピー元ファイルのスタブ化フラグC106CがOFFに設定されている場合(S130:NO)、受付プログラムP104は、コピー元ファイルがクローンファイルであるか否かを判定する(S138)。
コピー元ファイルがクローンファイルではない場合(S138:NO)、受付プログラムP104は、重複排除プログラム(図30)を呼び出し、コピー元ファイルをクローンファイルに変換する(S139)。クローンファイルではないファイルとしては、クローン元ファイルと通常ファイルとがあるが、ホスト12はクローン元ファイルを認識できず、直接アクセスすることはできない。
受付プログラムP104は、クローンファイルに変換されたコピー元ファイルのiノード管理テーブルT10の情報をコピーして、コピー元ファイルのコピーファイルを作成する(S140)。つまり、コピーファイルも、クローンファイルとして作成される。
受付プログラムP104は、コピー元ファイルの参照するクローン元ファイルの参照カウントC106Eの値を1つ増加する(S141)。ステップS139またはステップS140のいずれかで、クローンファイルが新たに作成されたためである。
受付プログラムP104は、コピー元ファイルの最終アクセス日時C104を更新し(S135)、ステップS136に移る。これより先のステップS136、S137は説明を省略する。
図23は、受付プログラムP104により実行される削除処理を示すフローチャートである。受付プログラムP104は、ホスト12からの削除要求を受領すると、本処理を実行する。
受付プログラムP104は、削除対象ファイルのスタブ化フラグC106CがONに設定されているか判定する(S150)。受付プログラムP104は、削除対象ファイルのスタブ化フラグがONに設定されている場合(S150:YES)、削除対象ファイルのiノード管理テーブルT10を削除する(S151)。さらに、受付プログラムP104は、アーカイブ装置20に対して、削除対象ファイルの複製であるファイルを削除するよう指示して(S152)、本処理を終了する。
削除対象ファイルのスタブ化フラグがOFFに設定されている場合(S150:NO)、受付プログラムP104は、削除対象ファイルが非クローンファイルであるか判定する(S153)。非クローンファイルとは、クローンファイル以外のファイル、即ち、通常ファイルである。削除対象ファイルが通常ファイルの場合(S153:YES)、受付プログラムP104は、削除対象ファイルのiノード管理テーブルT10を削除し(S154)、本処理を終了する。
削除対象ファイルが通常ファイルではない場合(S153:NO)、受付プログラムP104は、削除対象ファイルがクローンファイルであるか判定する(S155)。削除対象ファイルがクローンファイルではない場合(S155:NO)、受付プログラムP104は、本処理を終了する。
削除対象ファイルがクローンファイルの場合(S155:YES)、削除対象のクローンファイルの有するデータ(差分データ)を削除し、さらに、参照先であるクローン元ファイルの参照カウントC106Eを1つ減少させる(S156)。
受付プログラムP104は、クローン元ファイルの参照カウントC106Eの値が0になったか判定する(S157)。参照カウントC106Eの値が0ではない場合(S157:NO)、受付プログラムP104は、本処理を終了する。
クローン元ファイルの参照カウントC106Eの値が0になった場合(S157:YES)、受付プログラムP104は、クローン元ファイルのファイルデータ及びメタデータを削除する(S158)。
図24は、データムーバープログラムP101の処理を示すフローチャートである。本処理は、イベントが発生することにより起動される、イベント駆動型の処理である。
データムーバープログラムP101は、予め設定された所定イベントのうちいずれかのイベントが発生したかを判定する(S160)。データムーバープログラムP101は、イベントが発生すると(S160:YES)、一定時間が経過したというイベントが発生したのか判定する(S161)。
一定時間の経過を知らせるイベントが発生した場合(S161:YES)、データムーバープログラムP101は、スタブ化処理を実行する(S162)。スタブ化処理の詳細は、図25で後述する。
一定時間の経過を知らせるイベントではない場合(S160:NO)、データムーバープログラムP101は、レプリケーション処理の実行を要求するイベントであるか判定する(S163)。レプリケーション処理の実行を要求するイベントの場合(S163:YES)、データムーバープログラムP101は、レプリケーション処理を実行する(S164)。レプリケーション処理の詳細は、図26で後述する。
レプリケーション処理の実行を要求するイベントではない場合(S163:NO)、データムーバープログラムP101は、ファイルの同期を要求するイベントであるか判定する(S165)。ファイルの同期を要求するイベントの場合(S165:YES)、データムーバープログラムP101は、ファイル同期処理を実行する(S166)。ファイル同期処理の詳細は、図27で後述する。
ファイルの同期を要求するイベントではない場合(S165:NO)、データムーバープログラムP101は、リコール処理の実行を要求するイベントであるか判定する(S167)。リコール処理の実行を要求するイベントである場合(S167:YES)、データムーバープログラムP101は、アーカイブ装置20からファイルデータを取得して、ファイルストレージ装置10に送信する(S168)。ファイルストレージ装置10には、メタデータは残されているので、アーカイブ装置20からファイルデータのみ取得すればよい。
図25は、データムーバープログラムP101により実行されるスタブ化処理の詳細を示すフローチャートである。
データムーバープログラムP101は、ファイルストレージ装置10のファイルシステムの空き容量RSをチェックする(S170)。データムーバープログラムP101は、空き容量RSが所定の空き容量閾値ThRSよりも小さいか判定する(S171)。空き容量RSが閾値ThRS以上の場合(S171:NO)、本処理は終了して、図24の処理に戻る。
空き容量RSが閾値ThRSよりも小さい場合(S171:YES)、データムーバープログラムP101は、空き容量RSが閾値ThRS以上になるまで、最終アクセス日時の古い順に、レプリケーション済ファイルを選択する(S172)。
データムーバープログラムP101は、選択されたファイルのデータを削除し、そのファイルのスタブ化フラグをONに設定し、そのファイルのレプリケーション済フラグをOFFに設定する(S173)。これにより、ステップS172で選択されたファイルは、スタブ化ファイルに変換される。さらに、クローンファイルがスタブ化ファイルに変換された場合、データムーバープログラムP101は、そのクローンファイルが参照するクローン元ファイルの参照カウントC106Eの値を1つ減少させる(S173)。
図26は、データムーバープログラムP101により実行されるレプリケーション処理の詳細を示すフローチャートである。
データムーバープログラムP101は、アーカイブ装置20から、複製ファイルの格納先を取得する(S180)。データムーバープログラムP101は、取得した格納先を、レプリケーション対象のiノード管理テーブルT10のリンク先C106Dに設定する(S181)。
データムーバープログラムP101は、受付プログラムP104に対してリード要求を発行し、レプリケーション処理の対象であるファイルを取得する(S182)。データムーバープログラムP101は、レプリケーション対象のファイルをアーカイブ装置20に転送する(S183)。データムーバープログラムP101は、レプリケーション対象ファイルのレプリケーション済フラグC106BにONを設定する(S184)。
図27は、データムーバープログラムP101により実行されるファイル同期処理を示すフローチャートである。
データムーバープログラムP101は、受付プログラムP104に対してリード要求を発行し、更新リストに記載されているファイルのデータ及びメタデータを取得する(S190)。更新リストとは、レプリケーション処理済のファイルのうち、レプリケーション処理後に更新されて差分データが発生したファイルを特定するための情報である。更新リストは、ファイル同期処理を行うファイルを管理するための情報である。
データムーバープログラムP101は、取得したデータをアーカイブ装置20に転送し(S191)、更新リストの内容を削除する(S192)。
図28は、シングルインスタンス処理を行うためのコンピュータプログラムの一部である、抽出プログラムP105の動作を示すフローチャートである。
抽出プログラムP105は、ファイルシステムで管理されている各ファイルについて、受付プログラムP104にリード要求を発行する(S200)。抽出プログラムP105は、最終アクセス日時LT(iノード管理テーブルT10の欄C104に記載の値)が所定のアクセス日時閾値ThLTよりも古いファイルを全て選択する(S200)。抽出プログラムP105は、選択したファイルの名称をシングルインスタンス対象リストT11に追加する(S200)。
図29は、抽出プログラムP105と共にシングルインスタンス処理を実行するコンピュータプログラムの一部である、重複検出プログラムP106の動作を示すフローチャートである。
重複検出プログラムP106は、シングルインスタンス対象リストT11から、対象ファイル名を取得する(S210)。重複検出プログラムP106は、重複排除プログラム(図30)を呼び出して、対象ファイルのシングルインスタンス化(クローンファイル化)を実行させる(S211)。重複検出プログラムP106は、リストT11に記載の全てのファイルについてシングルインスタンス処理を適用するまで(S212)、ステップS210、S211を実行する。
図30は、重複排除プログラムの動作を示すフローチャートである。重複検出プログラムは、インデックスディレクトリ下にあるサブディレクトリ(図9)のうち、対象ファイルのサイズに対応するサブディレクトリを検索する(S220)。
重複排除プログラムは、対象ファイルとサブディレクトリ内のクローン元ファイルとを比較し(S221)、対象ファイルに一致するクローン元ファイルが有るか判定する(S222)。
検索対象のサブディレクトリ内に、対象ファイルに一致する既存のクローン元ファイルが無い場合(S222:NO)、重複排除プログラムは、新たなクローン元ファイルを追加する(S223)。
つまり、重複排除プログラムは、対象ファイルを新たなクローン元ファイルとして、検索対象サブディレクトリに追加する。重複排除プログラムは、新たに作成したクローン元ファイルの参照カウントC106Eに「0」を設定する(S224)。
重複排除プログラムは、クローン元ファイルのiノード番号を、対象ファイルの参照先iノード番号C106Aに設定する(S225)。重複排除プログラムは、対象ファイルのデータを削除し(S226)、クローン元ファイルの参照カウントC106Eの値を1つ増加させる(S227)。
このように構成される本実施例によれば、ファイルストレージ装置10の記憶領域(ファイルシステムの領域)を効率的に使用することができる。このため、より多くのファイルをファイルストレージ装置10に格納することができ、アクセス時の応答性が高まり、さらに、ユーザの使い勝手が向上する。
本実施例では、クローン元ファイルはレプリケーション処理の対象外となっているため、レプリケーション処理の実行を前提とするスタブ化処理もクローン元ファイルには適用されない。従って、ユーザから直接アクセスされないクローン元ファイルが、見かけ上の使用頻度が少ないことを理由にスタブ化ファイルに変換されてしまうのを未然に防止することができる。この結果、クローン元ファイルを参照するクローンファイルの応答性能を維持することができる。
本実施例では、ファイルのコピー要求を受けた場合に、コピーファイルをクローンファイルとして作成する。このため、ファイルデータをコピーする必要がなく、ファイルストレージ装置10の記憶領域を有効に使用できる。
本実施例では、ファイルのコピー要求を受けた場合に、コピー対象のファイルに一致するクローン元ファイルが存在しない場合は、コピー対象ファイルに一致するクローン元ファイルを新たに作成し、コピー対象ファイルをクローンファイルに変換する。従って、速やかにシングルインスタンス処理を適用することができ、重複データの存在時間を短くして、ファイルストレージ装置10の記憶領域を有効に利用できる。即ち、通常の周期でシングルインスタンス処理が実行されるよりも前に、ファイルコピーの時点で、重複データを直ちに排除することができる。
本実施例では、クローン元ファイルを参照するクローンファイルが作成されるたびに、クローン元ファイルの参照カウントC106Eの値を1つずつ増加させる。そして、本実施例では、クローンファイルが削除されたり、スタブ化ファイルに変換されたりするたびに、参照カウントC106Eの値を1つずつ減少させ、参照カウントC106Eの値が0になったら、クローン元ファイルを削除する。従って、クローン元ファイルを参照しているクローンファイルが存在する限りは、クローン元ファイルを存続させることができ、クローンファイルの応答性能を維持できる。さらに、クローン元ファイルを参照するクローンファイルが一つも存在しなくなった場合は、クローン元ファイルを削除するため、ファイルストレージ装置10の記憶領域を有効に使用することができる。
本実施例では、クローンファイルは、クローンファイルの固有のデータ(差分データ)とクローン元ファイルのデータのうち参照していたデータとの両方を保持した状態で、アーカイブ装置20に記憶される。つまり、アーカイブ装置20に格納されるクローンファイルは、全てのデータを保持している。従って、万が一、ファイルストレージ装置10に記憶されているクローンファイルまたはクローン元ファイルのいずれかが損傷した場合でも、アーカイブ装置20から完全なクローンファイルをファイルストレージ装置10に書き戻すことができる。
本実施例では、ユーザから見えない特別なディレクトリ(インデックスディレクトリ)内にクローン元ファイルを格納する。このため、ユーザの誤操作からクローン元ファイルを保護して、階層化ストレージシステムの信頼性を高めることができる。
本実施例では、インデックスディレクトリ内に、ファイルサイズのランク毎にサブディレクトリを設け、対応するファイルサイズのサブディレクトリ内で、クローン元ファイルを管理する。従って、対象ファイルのサイズを基に、クローン元ファイルの検索範囲を絞り込むことができ、対象ファイルに一致するクローン元ファイルを高速に検索することができる。
図31〜図38を参照して第2実施例を説明する。本実施例は、第1実施例の変形例に該当する。従って、第1実施例との相違を中心に説明する。本実施例では、アーカイブ装置20側でも、クローン元ファイルをレプリケーション処理及びスタブ化処理の対象とする。本実施例では、クローン元ファイルの最終アクセス日時を適切に評価して、参照されているクローン元ファイルがスタブ化ファイルに変換されるのを防止する。
図31は、本実施例のレプリケーション処理で転送されるデータを示す。図31(a)は、クローン元ファイル及び通常ファイルの場合を示す。クローン元ファイル及び通常ファイル(非クローンファイル)の複製をアーカイブ装置20に作成する場合、ファイルストレージ装置10からアーカイブ装置20にファイルデータの全てを転送する。
これに対し、クローンファイルの場合は、図31(b)に示すように、クローンファイルに固有のデータ(クローン元ファイルとの差分データ)のみを、ファイルストレージ装置10からアーカイブ装置20に転送する。
アーカイブ装置20では、ファイルストレージ装置10と同様に、複製されたクローンファイルは、複製されたクローン元ファイルが有するデータの一部または全部を参照している。
第1実施例では、クローンファイルは、全てのデータを保持した状態でアーカイブ装置20に転送される。従って、重複したデータ転送が行われることになり、通信ネットワークが混在するばかりか、アーカイブ装置20の記憶領域も無駄に使用される。
これに対し、本実施例では、図31に示すように、クローンファイルは、差分データのみがファイルストレージ装置10からアーカイブ装置20に転送される。このため、本実施例では、重複したデータ転送が行われるのを抑制することができ、アーカイブ装置20の記憶領域を効率的に使用することができる。
しかし、本実施例では、クローン元ファイルもレプリケーション処理の対象とするため、クローンファイルよりも先にクローン元ファイルがスタブ化ファイルに変換されてしまう可能性がある。上述の通り、クローン元ファイルは基準となるファイルであり、誤操作による破壊または消去から保護すべく、特別なディレクトリで管理されている。
従って、クローン元ファイルを参照するクローンファイルが頻繁に使用されても、参照されているデータを保持するクローン元ファイルの使用頻度に影響を与えない。その結果、参照されているクローン元ファイルが参照しているクローンファイルよりも先にスタブ化ファイルに変換されてしまう。スタブ化されたクローン元ファイルを参照する場合は、リコール処理を行う必要があるため、クローンファイルの応答性能は低下し、ユーザの使い勝手が悪化する。
そこで、本実施例では、クローンファイルの最終アクセス日時に基づいて、クローン元ファイルの最終アクセス日時を算出する。クローンファイルの最終アクセス日時に基づいて、クローン元ファイルの最終アクセス日時を算出する方法としては、例えば、以下の方法が考えられる。
第1の方法は、同一のクローン元ファイルを参照する複数のクローンファイルがそれぞれ有する最終アクセス日時のうち、最も新しい最終アクセス日時を、クローン元ファイルの最終アクセス日時として使用する方法である。
第2の方法は、同一のクローン元ファイルを参照する複数のクローンファイルがそれぞれ有する最終アクセス日時の平均値を、重み付けして、または、重み付けすることなく、算出する方法である。
上記2つの方法の優劣を検討する。第1の方法の場合、複数のクローンファイルの中で最も新しい最終アクセス日時を有するクローンファイルが、形式的にクローン元ファイルを参照しているに過ぎず、実際にはクローン元ファイルとの間に共通するデータを持たない場合があり得る。クローン元ファイルと実質的に無関係なクローンファイルの最終アクセス日時によって、クローン元ファイルの最終アクセス日時を決定するのは、適切ではなく、好ましくないと考えられる。
さらに、第1の方法の場合、例えば、複数のクローンファイルのうち大多数のクローンファイルの最終アクセス日時が古いのにもかかわらず、一つのクローンファイルの最終アクセス日時だけが新しい場合に、その一つだけ新しい最終アクセス日時を採用するのは、実態とかけ離れている可能性がある。多くのクローンファイルは殆ど使用されていないのに、ただ一つのクローンファイルだけが使用されているということは、多数決的な観点では、クローン元ファイルの役割は終わったと見るべきである。
従って、本実施例では、第2の方法を採用し、複数のクローンファイルのそれぞれ有する最終アクセス日時の平均値を算出して、その平均値をクローン元ファイルの最終アクセス日時として設定する。但し、特許請求の範囲から除かれない限り、第1の方法も本発明の範囲に含まれる。
図32は、クローン元ファイルの最終アクセス日時を算出する方法(第2の方法)を示す説明図である。
図32には、クローン元ファイルを参照する3つのクローンファイルCF1、CF2、CF3が示されている。クローンファイルCF1のデータは、クローン元ファイルのデータと完全に一致する。クローンファイルCF2のデータは、クローン元ファイルのデータと多くが一致し、一部が異なる。クローンファイルCF3のデータは、クローン元ファイルのデータと全く一致しない。
この場合、クローンファイルの最終アクセス日時の平均値ALTは、クローンファイルCF1の最終アクセス日時LT1と、クローンファイルCF2の最終アクセス日時LT2とから算出する(ALT=(LT1+Lt2)。その平均値ALTがクローン元ファイルの最終アクセス日時C104に設定される。
ここで、平均値ALTの算出に際して、クローン元ファイルとデータが全く共通しないクローンファイルCF3の最終アクセス日時LT3を除外するのは、クローン元ファイルと無関係のクローンファイルを排除して、より実態に近い最終アクセス日時を算出するためである。
データの全く共通しないクローンファイルを除外するということは、換言すれば、データの共通する程度に応じてクローンファイルに重み付けし、最終アクセス日時の平均値を算出するということである。
即ち、データの共通するクローンファイルCF1、CF2の最終アクセス日時LT1、LT2には係数W1(例えば1)をかけて使用し、データが共通しないクローンファイルCF3の最終アクセス日時LT3には係数W2(例えば0)をかけて使用する。これにより、最終アクセス日時の平均値ALTを、ALT=(LT1×W1+LT2×W1+LT3×W2)/3)として求めることができる。重み係数W1は0以上の値であれば、1以外の値に設定してもよい。重み係数W2は、W1より小さい値であれば、0以上の値に設定してもよい。クローン元ファイルのデータを参照する割合に応じて、重み係数Wの値を設定してもよい。但し、平均値ALTが、各クローンファイルの最終アクセス日時LTとかけ離れないように、最終的に調整する必要がある。
図33は、最終アクセス日時を取得するためのプログラムの動作を示すフローチャートである。最終アクセス日時取得プログラム(以下、LT取得プログラム)は、受付プログラムP104により呼び出される。最終アクセス日時を必要とする処理を実行する場合に、LT取得プログラムが起動される。
まず最初に、LT取得プログラムは、対象ファイルがクローン元ファイルであるか判定する(S300)。クローン元ファイルの場合(S300:YES)、LT取得プログラムは、図32で述べたように、クローン元ファイルを参照するクローンファイルから最終アクセス日時を取得して、それらの平均値を算出する(S301)。LT取得プログラムは、算出した平均値をクローン元ファイルの最終アクセス日時として、要求元である受付プログラムP104に返して(S302)、本処理を終了する。
対象ファイルがクローン元ファイルではない場合(S300:NO)、LT取得プログラムは、iノード管理テーブルT10の最終アクセス日時C104から値を取得する(S303)。LT取得プログラムは、取得した最終アクセス日時を受付プログラムP104に返して(S302)、本処理を終了する。
図34は、受付プログラムP104により実行される、リード要求処理及びライト要求処理を示すフローチャートである。
受付プログラムP104は、ホスト12からの処理要求を受領すると、対象ファイルのスタブ化フラグにONが設定されているか判定する(S310)。スタブ化フラグがOFFに設定されている場合(S310:NO)、図21で述べた処理に移る。
スタブ化フラグがONに設定されている場合(S310:YES)、受付プログラムP104は、対象ファイルがクローンファイルであるか判定する(S311)。対象ファイルがクローンファイルの場合(S311:YES)、図35の処理に移る。対象ファイルがクローンファイルではない場合(S311:NO)、図36の処理に移る。
図35は、対象ファイルがクローンファイルの場合の処理である。図35に示す処理は、図20に示す処理のうちステップS101、S102、S103、S105、S107、S108及びS109を備えており、ステップS104及びS106を備えていない。
本実施例では、クローン元ファイルもスタブ化ファイルに変換される可能性があるため、図35に示す処理では、ステップS104に代えて新ステップS312及びS313を実行し、ステップS106に代えて新ステップS314及びS315を実行する。
リード要求の場合(S101:read)、受付プログラムP104は、対象ファイルのブロックアドレスが有効であるか判定する(S102)。
ブロックアドレスが有効ではない場合(S102:NO)、受付プログラムP104は、対象ファイルであるクローンファイルの参照しているクローン元ファイルのデータについてリコールを要求する(S312)。さらに、受付プログラムP104は、対象ファイルであるクローンファイルのデータについてリコールを要求し、クローン元ファイルのデータとクローンファイルのデータをマージした結果を、要求元に返す(S313)。
一方、ライト要求の場合(S101:write)、受付プログラムP104は、対象ファイルであるクローンファイルが参照しているクローン元ファイルのデータについてリコールを要求する(S314)。さらに、受付プログラムP104は、対象ファイルであるクローンファイルのデータについてリコールを要求する(S315)。その後、受付プログラムP104は、対象ファイルであるクローンファイルのデータにライトデータを上書きする(S107)。
図36は、図34の処理において対象ファイルがクローンファイルではない場合の処理を示すフローチャートである。本処理は、図20で述べたステップS101〜S109のみを含むため、説明を省略する。
図37は、レプリケーション処理またはファイル同期処理のために、ファイルストレージ装置10からアーカイブ装置20に転送するためのデータを読み出す処理を示すフローチャートである。
最初に、受付プログラムP104は、対象ファイルがクローンファイルであるか判定する(S320)。対象ファイルがクローンファイルではない場合(S320:NO)、受付プログラムP104は、iノード管理テーブルT10のブロックアドレスに従ってデータを取得し、要求元に返す(S321)。受付プログラムP104は、対象ファイルの最終アクセス日時C104を更新し(S322)、本処理を終了する。
対象ファイルがクローンファイルの場合(S320:YES)、受付プログラムP104は、iノード管理テーブルT10のブロックアドレスに従って、クローンファイルに固有のデータ(差分データ)を取得し、そのデータを要求元に返す(S323)。
図38は、受付プログラムP104により実行されるファイルコピー処理を示すフローチャートである。本処理は、図22で述べた処理と比較して、ステップS133に代えて新ステップS330を備えている。
コピー対象ファイルのブロックアドレスが有効ではない場合(S131:NO)、受付プログラムP104は、クローン元ファイル及びクローンファイルについてリコールを要求し、ファイルデータ及びメタデータを取得する(S330)。
このように構成される本実施例も第1実施例と同様の効果を奏する。さらに、本実施例では、クローン元ファイルもレプリケーション処理の対象とし、アーカイブ装置20側でもシングルインスタンスの関係を維持する。従って、本実施例では、クローンファイルに固有のデータのみをアーカイブ装置20に転送すればよく、ファイルストレージ装置10からアーカイブ装置20へのデータ転送サイズを小さくできる。また、アーカイブ装置20の記憶領域も効率的に使用できる。
本実施例では、クローン元ファイルの最終アクセス日時を、クローンファイルの最終アクセス日時に基づいて算出する(例えば、平均値を求める)。従って、クローンファイルに参照されているクローン元ファイルがクローンファイルよりも先にスタブ化ファイルに変換されるのを抑制することができる。このため、クローンファイルの応答性能の低下を防止できる。