(54)【発明の名称】仮想化されたファイル・システムのマイグレーションのための方法および装置、仮想化されたファイル・システムのマイグレーションのためのデータ・ストレージ・システム、ならびにデータ・ストレージ・システム内で使用するためのファイル・サーバ
(58)【調査した分野】(Int.Cl.,DB名)
前記制御手段は、前記ファイル・システム仮想化プロセスの実行を完了する前に前記ファイル・システム・マイグレーション・プロセスが命令された場合に、前記ファイル・システム仮想化プロセスを実行することが完了したときに前記命令されたファイル・システム・マイグレーション・プロセスの実行を開始する、
請求項1乃至3のうちのいずれか1項に記載の装置。
前記ファイル・システム仮想化プロセスを実行することは、完全な第1のファイル・システム構造が前記第2のファイル・システムの前記第2の構造情報に従って前記第1のファイル・システム内に作成されたときに完了し、それぞれの外部リンク・オブジェクトは、前記第2のファイル・システム内に存在する各ファイルに対して前記第1のファイル・システム内の仮想化されたファイルとして存在し、それぞれのディレクトリは、前記第2の構造情報に従って前記第2のファイル・システム内に存在する各ディレクトリに対して前記第1のファイル・システム内の仮想化されたファイル・システム・オブジェクトとして存在する、
請求項1乃至4のうちのいずれか1項に記載の装置。
前記制御手段は、前記第1ファイルに対応する前記仮想化されたファイルが前記第1のファイル・システム内に存在するか、または前記第1のファイル・システム内に作成されている場合に、前記第1ファイルに対応する前記仮想化されたファイルの少なくともメタデータを更新する、
請求項1乃至6のうちのいずれか1項に記載の装置。
前記第1の構造情報の作成中に、前記制御手段は、前記第1のファイル・システム内に仮想化されたファイル・システム・オブジェクトを作成し、前記第1のファイル・システムの各仮想化されたファイル・システム・オブジェクトは前記第2のファイル・システム内に存在するそれぞれのファイル・システム・オブジェクトに関連付けられる、
請求項1、3乃至7のうちのいずれか1項に記載の装置。
前記第2のファイル・システム内に存在する前記それぞれのファイル・システム・オブジェクトがディレクトリであるときに、前記制御手段は、前記第1のファイル・システム内に仮想化されたファイル・システム・オブジェクトとしてそれぞれの関連付けられているディレクトリを作成し、
前記第2のファイル・システムに存在する前記それぞれのファイル・システム・オブジェクトがファイルであるときに、前記制御手段は、前記第1のファイル・システム内に仮想化されたファイルとしてそれぞれの関連付けられている外部リンク・オブジェクトを作成する、
請求項8に記載の装置。
前記制御手段は、前記第2のファイル・システム内に存在する前記ファイルのファイルコンテンツデータが前記ファイル・システム・マイグレーション・プロセスにおいて前記第2のファイル・システムから前記第1のファイル・システムに完全にマイグレーションされるときに、前記第2のファイル・システム内に存在するファイルに関連付けられている作成された外部リンク・オブジェクトを削除する、
請求項9に記載の装置。
前記第1ファイルに対応するそれぞれの仮想化されたファイルについてのファイルコンテンツデータのマイグレーション中に、前記コンピュータから前記第1のファイル・システム内の第2ファイルを修正する第2要求を受信したときに、前記制御手段は、
前記第2要求に従い前記第2ファイルに対応する前記第2の構造情報の前記それぞれのファイルを修正するために前記第2の装置と通信し、
前記第2要求が、前記第2ファイルに対応する、前記第1の構造情報の前記部分的にマイグレーションされたファイル、にすでにマイグレーションされているファイルデータコンテンツに関係するときに、前記第2要求に従い前記第2ファイルに対応する前記第1の構造情報の前記それぞれの部分的にマイグレーションされたファイルを修正する前記第2要求を実行する、
請求項1乃至10のうちのいずれか1項に記載の装置。
前記第1ファイルに対応するそれぞれの仮想化されたファイルについてのファイルコンテンツデータをマイグレーション中に、前記コンピュータから前記第1のファイル・システム内の第4ファイルから読み出す第2読み出し要求を受信したときに、前記制御手段は、
前記第4ファイルのコンテンツデータが前記第1のファイル・システムにまだ完全にはマイグレーションされていない場合に前記第2読み出し要求に従い前記第4ファイルに対応する前記第2の構造情報のそれぞれのファイルから読み出すために前記第2の装置と通信し、
前記第2読み出し要求が、前記第4ファイルに対応する、前記第1の構造情報の前記部分的にマイグレーションされたファイル、にすでにマイグレーションされているファイルデータコンテンツに関係する場合に、前記第2読み出し要求に従い前記第4ファイルに対応する前記第1の構造情報の前記それぞれの部分的にマイグレーションされたファイルから前記第4ファイルのコンテンツデータを読み出す、
請求項1、2、4乃至12のうちのいずれか1項に記載の装置。
【発明の概要】
【発明が解決しようとする課題】
【0004】
以下でさらに詳しく説明されているように、本発明の実施形態は、データ・ストレージ・システムおよびその部品に関係するものとしてよく、そこでは、(新しい)第1のファイル・システム管理ユニットは、複数のクライアント・コンピュータと、クライアント・コンピュータによってアクセス可能な1つまたは複数のファイル・システムを管理する(レガシー)第2のファイル・システム管理ユニットとの間で相互接続される。
【課題を解決するための手段】
【0005】
(新しい)第1のファイル・システム管理ユニットを相互接続した後に、(新しい)第1のファイル・システム管理ユニットを通じて、クライアント・コンピュータによる(レガシー)第2のファイル・システム管理ユニットの1つまたは複数のファイル・システムへのI/Oアクセスが達成され得る。仮想化と称される第1のフェーズにおいて、(レガシー)第2のファイル・システム管理ユニットの1つまたは複数のファイル・システムは、(新しい)第1のファイル・システム管理ユニットの1つまたは複数の仮想化されたファイル・システムによって表されるものとしてよく、仮想化されたファイル・システムは仮想化フェーズにおいて徐々に構築される。マイグレーションと称される、第2のフェーズ(仮想化フェーズとオーバーラップし得る)では、(レガシー)第2のファイル・システム管理ユニットの1つまたは複数のファイル・システムのユーザ・データは、(新しい)第1のファイル・システム管理ユニットにマイグレーションされ得る。
【0006】
本発明によれば、目的は、第2のファイル・システムのファイル・システム・オブジェクトへの効率的でシームレスなクライアント・アクセスを可能にしながら、第2のファイル・システムからの仮想化されたファイル・システム内のユーザ・データの効率的なデータ・マイグレーションを実行するための方法、および装置、データ・ストレージ・システムおよびファイル・サーバを実現することである。
【0007】
いくつかの実施形態によれば、複数のクライアント・コンピュータと、第1のファイル・システムを管理し、複数のクライアント・コンピュータに接続されるようにするための(新しい)第1のファイル・システム管理ユニットと、第2のファイル・システムを管理し、第1のファイル・システム管理ユニットに接続されるようにするための(レガシーの)第2のファイル・システム管理ユニットとを備えるデータ・ストレージ・システムにおいて第1のファイル・システムのデータ・マイグレーションを行うための装置が実現されるものとしてよく、第2のファイル・システムは複数のデータ・ファイルを備え、第1のファイル・システム(仮想化されたファイル・システム)は複数の外部リンク・オブジェクトを(一種の仮想ファイルとして)備え、第1のファイル・システムの各外部リンク・オブジェクトは第2のファイル・システムのそれぞれのデータ・ファイルに関連付けられ、これにより、第2のファイル・システムのそれぞれのデータ・ファイルへのクライアント・アクセスを可能にし、特に、第1のファイル・システムのそれぞれの外部リンク・オブジェクトを通じて第2のファイル・システムのそれぞれのデータ・ファイルへの間接的クライアント・アクセスを可能にする。
【0008】
したがって、第2のファイル・システム管理ユニットによって管理される第2のファイル・システムのデータ・ファイルのユーザ・データは、実際のユーザ・データがマイグレーションされる前であっても、(仮想化された)第1のファイル・システム内のそれぞれの外部リンク・オブジェクトを通じて(一種の仮想ファイルとして)クライアント・コンピュータによって間接的にアクセスされ得る。
【0009】
いくつかの実施形態では、装置は、第2のファイル・システムの第1のファイルのファイルコンテンツデータをマイグレーション・データ・ブロックの第1のグループに分割し、および/または第2のファイル・システムの第1のファイルのファイルコンテンツデータを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックの単位でマイグレーションするように適合された第1のファイル・システム管理ユニットを備え得る。これは、第2のファイル・システムのファイルのユーザ・データがデータのブロックで第1のファイル・システムに連続的にマイグレーションできるという利点を有する。
【0010】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスは、それぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間にブロックされ(キューに入れられる、一時的に差し控えられる)得るが、それぞれのマイグレーション・データ・ブロックのマイグレーションの際に受信されたマイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックに向けられたクライアント・アクセス要求は、キューに入れられ、マイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックがマイグレーションされた後に実行される。
【0011】
マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスがブロックされた(キューに入れられた)と説明されたときに、このことは、クライアント・アクセスは、「ブロックされる」という言い回しがプロセス/スレッド・スケジューリングの意味で使用されているという点において再び可能にされるまでキューに入れられることを意味する、すなわち、クライアント・アクセスは、一時的に差し控えられるという意味でキューに入れられる。クライアント側に唯一目立つ効果は、ある程度の待ち時間が加わる可能性があることであり得るが、クライアント・アクセスが再び可能になるとすぐに、キューに入れられているアクセスは好ましくは処理され、I/Oエラー・メッセージは発行されない。すなわち、ブロックされているデータ・ブロックへのクライアント・アクセス(I/Oアクセス)は、そのマイグレーションが完了するまでキューに入れられており、したがって、クライアント側が気付き得る唯一の効果は、ある程度の待ち時間が加わることである。
【0012】
好ましい態様において、マイグレーション・データ・ブロックの第1のグループのデータコンテンツへのクライアント・アクセスは、第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている、すべてのマイグレーション・データ・ブロックに対して、また第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットへのマイグレーションをまだ開始していない、すべてのマイグレーション・データ・ブロックに対して可能にされるものとしてよい。
【0013】
これは、データの特定のブロックがマイグレーションされている間であっても、同じファイルのすべてのブロックが、クライアント・コンピュータによってシームレスにアクセスされ得るという利点を有する。それに加えて、第2のデータ・システムの他のすべてのファイルへのユーザ・アクセスは、特定のファイルの1つのブロックのマイグレーションにおいて可能にされたままであってよい。すなわち、ファイルのマイグレーションするブロックへのアクセスは、そのファイルの1つのマイグレーションするブロックのマイグレーションの際のいくつかの期間のみについてブロックされ(キューに入れられ)得るが、同じファイルの他のブロックのマイグレーションの時間を含む、他のすべての時間において可能にされたままである。
【0014】
代替的実施形態では、第1のグループそれぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間、第1のファイルのデータコンテンツへのクライアント・アクセスは、ブロックされ(キューに入れられ、一時的に差し控えられ)得る。これは、特定のファイルのデータの特定のブロックがマイグレーションされている間であっても、第2のデータ・システムの少なくとも他のすべてのファイルが、クライアント・コンピュータによってシームレスにアクセスされ得るという利点を有する。すなわち、特定のファイルへのアクセスは、特定のファイルの1つまたは複数のブロックのマイグレーションの際のいくつかの期間のみについてブロックされ(キューに入れられ、一時的に差し控えられ)得るが、他のすべての時間において可能にされたままである。
【0015】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、マイグレーション・データ・ブロックの第1のグループのデータ・マイグレーション・データ・ブロックのブロック・サイズを、データ・ブロックを受信するために第1のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズおよびデータ・ブロックを送信するために第2のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズのうちのより小さい値として決定するように適合され得る。これは、ブロック・サイズは、可能な限り少ないマイグレーション・ステップでファイルコンテンツを効率的にマイグレーションするために可能な限り大きく決定されるが、それぞれのデータ・ブロックは、ブロック・サイズがデータ・ブロックを受信するために第1のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズおよびデータ・ブロックを送信するために第2のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズの両方よりも小さいか、または等しいので、単一の読み出し操作によってそのままマイグレーションされ得るという利点を有する。
【0016】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、第1のファイル・システム管理ユニットは、少なくとも1つのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定するようにさらに適合されるものとしてよく、少なくとも1つのターゲット・マイグレーション・データ・ブロックが、すでにマイグレーションされている場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行され、ターゲット・マイグレーション・データ・ブロックのどれもが、まだマイグレーションを開始していない場合、書き込みアクセス要求は、第2のファイル・システム管理ユニットによって第2のファイル・システム内で実行されるように第2のファイル・システム管理ユニットにパススルーされ得る。
【0017】
いくつかの実施形態では、少なくとも1つのターゲット・マイグレーション・データ・ブロックが、すでにマイグレーションされている場合、第1のファイル・システム管理ユニットは、第2のファイル・システム管理ユニットによって第2ファイル・システムにおいて実行され、第2のファイル・システムのユーザ・データを第1のファイル・システムのユーザ・データと同期させることができるように第2のファイル・システム管理ユニットに書き込みアクセス要求をパススルーするようにさらに適合され得る。
【0018】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、第1のファイル・システム管理ユニットは、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定するようにさらに適合されるものとしてよく、ターゲット・マイグレーション・データ・ブロックのどれもが、まだマイグレーションされていない場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行され、および/またはマイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックを後でマイグレーションするときに、第1のファイル・システム管理ユニットは、書き込みアクセス要求のデータ書き込みブロックに対応するデータ部分をマイグレーションするのを控えるように適合され得る。
【0019】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、第1のファイル・システム管理ユニットは、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定するようにさらに適合されるものとしてよく、ターゲット・マイグレーション・データ・ブロックのどれもが、まだマイグレーションされていない場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行され、および/または第1のファイル・システム管理ユニットは、書き込みアクセス要求のデータ書き込みブロックに割り当てられている現在のチェックポイント数よりも小さい、チェックポイント数を、すでにマイグレーションされているデータ部分の終了位置と書き込みアクセス要求のデータ書き込みブロックの開始位置との間のデータ・ホールに割り当てるようにさらに適合され得る。
【0020】
好ましい実施形態において、特定のファイルへの書き込み要求は、少なくとも特定のファイルのすべてのブロックが完全にマイグレーションされるまで、第2のファイル・システム内で常に特定のファイルのカノニカル・バージョン(canonical version)を有するように、少なくとも、第1のファイル・システム上のファイルコンテンツがカノニカル・バージョンとなり得るように特定のファイルが完全にマイグレーションされるまで、第1のファイル・システム管理ユニットによって第2のファイル・システム管理ユニットによって管理される第2のファイル・システムにパススルーされ得る。他の好ましい実施形態では、書き込み要求は、少なくとも第2のファイル・システムのすべてのファイルのすべてのブロックが完全にマイグレーションされるまで(すなわち、マイグレーション・フェーズの終わりまで)、第2のファイル・システム内で常にファイルのカノニカル・バージョンを有するように、少なくともすべてのファイルが完全にマイグレーションされるまで、第1のファイル・システム管理ユニットによって第2のファイル・システム管理ユニットによって管理される第2のファイル・システムにパススルーされ得る。
【0021】
上記の実施形態は、第1のファイル・システムにおいてローカルで(例えば、すべてのターゲット・ブロックがすでにマイグレーションされているとき)、第2のファイル・システムにおいてローカルで(例えば、マイグレーションされたターゲット・ブロックがもうないとき)、または第1および第2のファイル・システムの両方においても(例えば、いくつかのターゲット・ブロックがすでにマイグレーションされているとき)ユーザ書き込み要求を実行するかどうかが都合よく、効率的に決定され得るという利点を有する。決定は、以下で、どのデータ・ブロックがもうマイグレーションされているかを示すものとして(例えば、オブジェクト・ストア長がすでにマイグレーションされているブロックおよび/またはマイグレーションされたブロックの個数を示すという点において)以下で説明されているオブジェクト・ストア長(例えば、第1のファイルのマイグレーションの終わり領域を示す)に基づき実行され得る。
【0022】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた読み出しアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、第1のファイル・システム管理ユニットは、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定するようにさらに適合されるものとしてよく、すべてのターゲット・マイグレーション・データ・ブロックが、すでにマイグレーションされている場合、読み出しアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行され、ターゲット・マイグレーション・データ・ブロックの少なくとも1つが、まだマイグレーションを開始していない場合、読み出しアクセス要求は、第2のファイル・システム管理ユニットによって第2のファイル・システム内で実行されるように第2のファイル・システム管理ユニットにパススルーされ得、および/または第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにおいて受信された対応する読み出し応答は、第1のファイル・システム管理ユニットによって要求側クライアント・コンピュータにパススルーされ得る。
【0023】
上記の実施形態は、第1のファイル・システムにおいてローカルで(例えば、すべてのターゲット・ブロックがすでにマイグレーションされているとき)、第2のファイル・システムにおいてローカルで(例えば、マイグレーションされたターゲット・ブロックがいくつかのみであるか、もうないとき)ユーザ読み出し要求を実行するかどうかが都合よく、効率的に決定され得るという利点を有する。決定は、以下で、どのデータ・ブロックがもうマイグレーションされているかを示すものとして(例えば、オブジェクト・ストア長がすでにマイグレーションされているブロックおよび/またはマイグレーションされたブロックの個数を示すという点において)以下で説明されているオブジェクト・ストア長(例えば、第1のファイルのマイグレーションの終わり領域を示し得る)に基づき実行され得る。
【0024】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、第1のファイル・システム管理ユニットにおいて、第2のファイル・システムの第1のファイルに関連付けられている第1のファイル・システム内の第1のファイル・システム管理ユニットによって記憶されているファイルコンテンツデータのオブジェクト・ストア長を決定し、第2のファイル・システム管理ユニットから受信されたデータに基づき第1のファイル・システム管理ユニットにおいて、第2のファイル・システムの第1のファイルの長さを決定し、および/または前記オブジェクト・ストア長が第1のファイルの前記長さに等しいと決定されたときに第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされていると決定するようにさらに適合され得る。これは、典型的なファイル・システムにすでに用意されているファイル・システム属性の比較結果に基づきファイルのデータコンテンツが完全にマイグレーションされたかどうか、いつマイグレーションされたかが容易に決定され得るという利点を有する。
【0025】
ファイルのオブジェクト・ストア長(例えば、WFS onode長などの、第1のファイル・システム内のファイルのonode長)は、第1のファイル・システムにすでに転送(マイグレーション)されており、記憶されている記憶されたファイルコンテンツデータのサイズに対応し得る(すなわち、ファイルのオブジェクト・ストア長が、外部の第2のファイル・システム上のファイルの長さに対応するときに、このことは、実際のファイルコンテンツのすべてのデータが完全にマイグレーションされていることを意味する)。すなわち、オブジェクト・ストア長は、第1のファイル・システム内のファイルのユーザ・データのマイグレーションの終わり領域を示すものを表すものとして見なされ得る。ファイルのマイグレーションを開始する前に、実際のファイルコンテンツデータは転送(マイグレーション)されていないので、オブジェクト・ストア長は、第1のブロックがマイグレーションされるまでゼロのままである。次いで、各マイグレーションされたブロックは、オブジェクト・ストア長を1ブロック・サイズだけインクリメントし得る。オブジェクト・ストア長は、バイトまたはキロバイトなどの記憶単位またはブロック数の単位で与えられ得る。マイグレーション時のユーザ書き込みは、オブジェクト・ストア長に影響を及ぼし得ることに留意されたい(しかしながら、ユーザ書き込みが第1のファイル・システムにおいてローカルで実行されるときのみである)。
【0026】
ファイルの長さ(例えば、第2のファイル・システムにおけるenode長)は、第2のファイル・システム内の第2のファイル・システム管理ユニットによって管理されるような第2のファイル・システムにおけるファイル・データ(ファイルコンテンツ)に割り振られた記憶領域の実際のサイズを示し得る。ファイルの長さは、バイトまたはキロバイトなどの記憶単位またはブロック数の単位で与えられ得る。仮想化およびマイグレーション時のユーザ書き込みは、ファイルの長さに影響を及ぼし得ることに留意されたい。
【0027】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされたと決定されたときに第2のファイル・システムの第1のファイルに関連付けられている第1のファイル・システムの外部リンク・オブジェクトを削除するようにさらに適合され得る。いくつかの実施形態では、第1のファイル・システム管理ユニットは、第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされたと決定されたときに、第2のファイル・システム管理ユニットに、第2のファイル・システムの第1のファイルの削除を求める要求を送信するようにさらに適合され得る。第1のファイル・システム管理ユニットは、ファイルが完全にマイグレーションされたということをファイルのメタデータで示すために、第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされたと決定されたときに第2のファイル・システムの第1のファイルに関連付けられている第1のファイル・システムのメタデータの1つまたは複数のフラグを更新するようにさらに適合され得る。
【0028】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、クライアント・コンピュータから、ファイル作成要求で示されているパス・ロケーションにおいて第2のファイル・システム内に第2のファイルを作成することを求めるファイル作成要求を受信し、および/またはファイル作成要求で示されているパス・ロケーションに基づき第1のファイル・システム内に第2のファイルを作成するようにさらに適合され得る。特に、いくつかの好ましい実施形態において、新規ファイルは、ファイル作成要求を第2のファイル・システム管理ユニットにパススルーすることなくレギュラー・ファイルとして第1のファイル・システムにおいてのみ作成され得る。
【0029】
新規ファイルの作成(「create」操作)がマイグレーション・フェーズにおいて第1のファイル・システムでのみ実行されることに加えて、操作「unlink」、「link」、および/または「rename」は、好ましくは、マイグレーション・フェーズにおいて第2のファイル・システム管理ユニットにパススルーされることなく第1のファイル・システム管理ユニットによって第1のファイル・システムにおいてのみ実行される。
【0030】
仮想化の際に発見される第2のファイル・システムのファイルのファイル・ハンドルなどのファイル・メタデータがマイグレーションの際に陳腐化する場合(例えば、第2のファイル・システムが破滅的障害の後にバックアップから再構築される必要がある場合)、それらは次の2つの対策により「create」/「link」/「unlink」/「rename」操作がマイグレーションの際に第2のファイル・システムに受け渡されないのでマイグレーションの開始時に第2の(レガシーの)ファイル・システム・ツリーの観点から再生成され得る。第1に、第1のファイル・システムのスナップショットがマイグレーションの開始時に取られ、このビューを保存することができる。第2に、与えられたオブジェクトに対するファイル・ハンドルを含むファイル・メタデータが、スナップショット内の対応するXLOのパスを導出し、次いで第2の(レガシーの)ファイル・システム内でこのパスを探索することによって見つけられ得る。マイグレーションの際に、ファイルは、rename操作を介して、関連付けのツリー(第2のファイル・システムのツリーに対応する)の外にあっても、第1のファイル・システム内の任意の場所に移動することができ、これは、関連付けのツリーの境界を横切るときにcopy/deleteを必要とすることがない。
【0031】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、マイグレーション・データ・ブロックの第1のグループの第1のマイグレーション・データ・ブロックについて、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定し、および/または、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有していない(すなわち、全部ゼロである、ゼロで埋めたビットのみを有する)と決定されたとき、データ・ブロックがゼロで埋めたビットのみを有すると決定されたときに、前記第1のマイグレーション・データ・ブロックを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションすることおよび/または記憶することを控え、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとする(ゼロで埋めたビットのみを有する)ことを示す第1のファイルのメタデータを更新するようにさらに適合され得る。
【0032】
例えば、ゼロで埋めたビットを第1のファイル・システム内に記憶するために実際にゼロをディスクにマイグレーションし、書き込む代わりに、ファイルのメタデータ内に、対応するデータ・ブロックがゼロのみを含むものとする(ゼロで埋めたビットのみを有する)ことだけが示され得る。これは、マイグレーションされるファイル内のスパース性を処理し、マイグレーションをより効率的にすることを有利に可能にする。特に、スパースであることが、マイグレーションにわたって保存され、第2のファイル・システムが多数のスパース・ファイルを含む場合、スパース・ファイルは、第1のストレージ・ユニット上により多くの領域を必要とし、そのため、ファイル・システムがスパース・ファイルで満たされる危険性および拡張する必要性が生じ、またクォータに影響を及ぼす危険性も生じ得る。第1のファイル・システムをスパース・ファイルで埋めることを回避するために、マイグレーションされるデータ・ブロックがセルで埋めたビットのみを有する(データ・ブロックのすべてのビット・エントリがゼロである)と決定したときに、第1のファイル・システム管理ユニットは、ブロックのデータを実際にマイグレーションすることを控え、それぞれのファイルのonode長をブロック・サイズだけインクリメントするのみとしてよい。それに加えて、ブロックのメタデータのフラグがセットされ、ブロックがゼロのみを含む(ゼロで埋めたビットのみを有する)ことを示すことができる。
【0033】
効率上の理由から、1つまたは複数のデータ・ブロックについて、それぞれのデータ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうか(すなわち、ブロックがゼロのみを有するかどうか)を決定するステップは、CPU以外の手段によって実行され得ることが好ましい。例えば、1つまたは複数のデータ・ブロックについて、それぞれのデータ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうか(すなわち、ブロックがゼロのみを有するかどうか)を決定するタスクは、第1のファイル・システム管理ユニットの1つまたは複数のFPGA(フィールド・プログラマブル・ゲート・アレイ)にオフロード(送信)され得る。
【0034】
この態様は、受信されたデータ・ブロックについて、前記データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定し、受信されたデータ・ブロックがゼロで埋めたビットのみを有する(すなわち、非ゼロ・ビットを有しない)と決定された場合にブロックのデータコンテンツをストレージ・ユニットに書き込むことを控え、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとする(ゼロで埋めたビットのみを有する)ことを示す第1のファイルのメタデータを更新するための独立した方法として、任意のファイル・システム・サーバにおける上記の仮想化およびマイグレーションの態様と無関係に実現され得ることに留意されたい。そのような方法において、以下で説明されるような好ましい態様は、特定の実装に使用され得る。
【0035】
いくつかの実施形態では、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定することは、第2のファイル・システム管理ユニットから受信される第1のファイルに向けられた読み出し応答に基づき第2のファイル・システム内の第1のファイルのファイルコンテンツの中の第1の非ゼロ・ビットの位置を示すデータに基づき第1のファイル・システム管理ユニットによって実行され得る。
【0036】
いくつかの実施形態では、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定することは、第1のマイグレーション・データ・ブロックのバイト毎の分析を行うことによって第1のファイル・システム管理ユニットによって実行され得る。
【0037】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域の使用量パーセンテージおよび/または第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域を示す第1のファイルの長さがスパースの閾値を示す1つまたは複数の条件を満たす場合のみ(使用量パーセンテージが特定の閾値を下回ったとき)、マイグレーション・データ・ブロックの第1のグループの第2のマイグレーション・データ・ブロックについて、前記マイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定し、および/または、前記第2のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有していないと決定された場合に前記第2のマイグレーション・データ・ブロックを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションすることを控え、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとすることを示す第1のファイルのメタデータを更新するようにさらに適合され得る。
【0038】
いくつかの実施形態では、第1のファイル・システム管理ユニットは、第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域の使用量パーセンテージと第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域を示す第1のファイルの長さとの比が所定の閾値を下回る場合に、マイグレーション・データ・ブロックの第1のグループの第2のマイグレーション・データ・ブロックについて、前記マイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定し、および/または、前記第2のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビット(すなわち、全部ゼロからなるビット)を有していないと決定された場合に前記第2のマイグレーション・データ・ブロックを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションすることを控え、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとすることを示す第1のファイルのメタデータを更新するようにさらに適合され得る。
【0039】
いくつかの実施形態によれば、複数のクライアント・コンピュータと、第1のファイル・システムを管理し、複数のクライアント・コンピュータに接続されるようにするための第1のファイル・システム管理ユニットと、第2のファイル・システムを管理し、第1のファイル・システム管理ユニットに接続されるようにするための第2のファイル・システム管理ユニットとを備えるデータ・ストレージ・システムにおいて第1のファイル・システムのデータ・マイグレーションを行うための方法が提供され得る。
【0040】
いくつかの実施形態によれば、第2のファイル・システムは、複数のデータ・ファイルを備え、第1のファイル・システムは複数の外部リンク・オブジェクトを備え、第1のファイル・システムの各外部リンク・オブジェクトは第2のファイル・システムのそれぞれのデータ・ファイルへのクライアント・アクセスを可能にするように第2のファイル・システムのそれぞれのデータ・ファイルに関連付けられる。
【0041】
いくつかの実施形態によれば、この方法は、第2のファイル・システムの第1のファイルのファイルコンテンツデータをマイグレーション・データ・ブロックの第1のグループに分割することと、第2のファイル・システムの第1のファイルのファイルコンテンツデータを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックの単位でマイグレーションすることとを含み得る。
【0042】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスは、それぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間に一時的に差し控えられ得るが、それぞれのマイグレーション・データ・ブロックのマイグレーションの際に受信されたマイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックに向けられたクライアント・アクセス要求は、キューに入れられ、マイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックがマイグレーションされた後に実行され得る。
【0043】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループのデータコンテンツへのクライアント・アクセスは、第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている、すべてのマイグレーション・データ・ブロックに対して、また第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットへのマイグレーションをまだ開始していない、すべてのマイグレーション・データ・ブロックに対して可能にされるものとしてよい。
【0044】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループのデータ・マイグレーション・データ・ブロックのブロック・サイズは、データ・ブロックを受信するために第1のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズおよびデータ・ブロックを送信するために第2のファイル・システム管理ユニットによってサポートされているような最大ブロック・サイズのうちのより小さい値として決定され得る。
【0045】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、この方法は、少なくとも1つのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定することを含むものとしてよく、
少なくとも1つのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされている場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行されるものとしてよく、ターゲット・マイグレーション・データ・ブロックのどれもが、まだマイグレーションを開始していない場合、書き込みアクセス要求は、第2のファイル・システム管理ユニットにパススルーされ、第2のファイル・システム管理ユニットによって第2のファイル・システム内で実行され得る。
【0046】
いくつかの実施形態によれば、少なくとも1つのターゲット・マイグレーション・データ・ブロックが、すでにマイグレーションされている場合、書き込みアクセス要求は、第2のファイル・システム管理ユニットにさらにパススルーされ、第2のファイル・システム管理ユニットによって第2のファイル・システム内で実行され得る。
【0047】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、この方法は、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定することを含むものとしてよく、ターゲット・マイグレーション・データ・ブロックのどれもがまだマイグレーションされていない場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行されるものとしてよく、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックを後でマイグレーションするときに、書き込みアクセス要求のデータ書き込みブロックに対応するデータ部分は、マイグレーションすることを控えられ得る。
【0048】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた書き込みアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、この方法は、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定することを含むものとしてよく、ターゲット・マイグレーション・データ・ブロックのどれもがまだマイグレーションされていない場合、書き込みアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行されるものとしてよく、すでにマイグレーションされているデータ部分の終了位置と書き込みアクセス要求のデータ書き込みブロックの開始位置との間のデータ・ホールは、書き込みアクセス要求のデータ書き込みブロックに割り当てられている現在のチェックポイント数よりも小さいチェックポイント数を割り当てられ得る。
【0049】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループの1つまたは複数のターゲット・マイグレーション・データ・ブロックに向けられた読み出しアクセス要求が、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて受信されたときに、この方法は、すべてのターゲット・マイグレーション・データ・ブロックがすでにマイグレーションされているかどうかを決定することを含むものとしてよく、すべてのターゲット・マイグレーション・データ・ブロックが、すでにマイグレーションされている場合、読み出しアクセス要求は、第1のファイル・システム管理ユニットによってローカルで実行され、ターゲット・マイグレーション・データ・ブロックの少なくとも1つが、まだマイグレーションを開始していない場合、読み出しアクセス要求は、第2のファイル・システム管理ユニットにパススルーされ、第2のファイル・システム管理ユニットによって第2のファイル・システム内で実行されるものとしてよく、第2のファイル・システム管理ユニットは、第1のファイル・システム管理ユニットによって要求側クライアント・コンピュータにパススルーされ得る対応する読み出し応答を第1のファイル・システム管理ユニットに送信する。
【0050】
いくつかの実施形態によれば、この方法は、第1のファイル・システム管理ユニットにおいて、第2のファイル・システムの第1のファイルに関連付けられている第1のファイル・システム内の第1のファイル・システム管理ユニットによって記憶されているファイルコンテンツデータのオブジェクト・ストア長を決定すること、第1のファイル・システム管理ユニットにおいて、第2のファイル・システムの第1のファイルの長さを決定すること、および/または前記オブジェクト・ストア長が第1のファイルの前記長さに等しいと決定されたときに第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされていると決定することを含み得る。
【0051】
いくつかの実施形態によれば、この方法は、第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされたと決定されたときに第2のファイル・システムの第1のファイルに関連付けられている第1のファイル・システムの外部リンク・オブジェクトを削除することを含み得る。いくつかの実施形態では、この方法は、第1のグループのすべてのマイグレーション・データ・ブロックがマイグレーションされていると決定されたときに第2のファイル・システムの第1のファイルを削除することをさらに含み得る。
【0052】
いくつかの実施形態によれば、この方法は、クライアント・コンピュータから第1のファイル・システム管理ユニットにおいて、ファイル作成要求で示されているパス・ロケーションにおいて第2のファイル・システム内に第2のファイルを作成することを求めるファイル作成要求を受信すること、および/またはファイル作成要求で示されているパス・ロケーションに基づき第1のファイル・システム内に第2のファイルを作成することを含み得る。
【0053】
いくつかの実施形態によれば、この方法は、マイグレーション・データ・ブロックの第1のグループの第1のマイグレーション・データ・ブロックについて、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定することと、および/または、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビット(すなわち、全部ゼロからなるビット)を有していないと決定されたときに前記第1のマイグレーション・データ・ブロックを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションすることを控えることと、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとすることを示す第1のファイルのメタデータを更新することとを含み得る。
【0054】
いくつかの実施形態によれば、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定することは、第2のファイル・システム管理ユニットから受信される第1のファイルに向けられた読み出し応答に基づき第2のファイル・システム内の第1のファイルのファイルコンテンツの中の第1の非ゼロ・ビットの位置を示すデータに基づき実行され得る。
【0055】
いくつかの実施形態によれば、前記第1のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定することは、第1のマイグレーション・データ・ブロックのバイト毎の分析を行うことによって実行され得る。
【0056】
いくつかの実施形態によれば、この方法は、第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域の使用量パーセンテージと第2のファイル・システム内の第1のファイルに対して割り振られた記憶領域を示す第1のファイルの長さとの比が所定の閾値を下回るときに、マイグレーション・データ・ブロックの第1のグループの第2のマイグレーション・データ・ブロックについて、前記マイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビットを有するかどうかを決定すること、および/または、前記第2のマイグレーション・データ・ブロックが少なくとも1つの非ゼロ・ビット(すなわち、全部ゼロからなる)を有していないと決定されたときに前記第2のマイグレーション・データ・ブロックを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションすることを控えること、および/または前記第1のマイグレーション・データ・ブロックに関連付けられている記憶領域がゼロのみを含むものとすることを示す第1のファイルのメタデータを更新することを含み得る。
【0057】
さらなる実施形態によれば、複数のクライアント・コンピュータと、第1のファイル・システムを管理し、複数のクライアント・コンピュータに接続されるようにするための第1のファイル・システム管理ユニットと、第2のファイル・システムを管理し、第1のファイル・システム管理ユニットに接続されるようにするための第2のファイル・システム管理ユニットとを備えるデータ・ストレージ・システムにおいて第1のファイル・システムのデータ・マイグレーションを行うための装置が実現されるものとしてよく、第2のファイル・システムは複数のデータ・ファイルを備え、第1のファイル・システムは複数の外部リンク・オブジェクトを備え、第1のファイル・システムの各外部リンク・オブジェクトは第2のファイル・システムのそれぞれのデータ・ファイルへのクライアント・アクセスを可能にするように第2のファイル・システムのそれぞれのデータ・ファイルに関連付けられる。
【0058】
いくつかの実施形態によれば、装置は、第2のファイル・システムの第1のファイルのファイルコンテンツデータをマイグレーション・データ・ブロックの第1のグループに分割し、第2のファイル・システムの第1のファイルのファイルコンテンツデータを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックの単位でマイグレーションするように適合されている第1のファイル・システム管理ユニットを備え得る。
【0059】
マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスは、それぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間に一時的に差し控えられ得るが、それぞれのマイグレーション・データ・ブロックのマイグレーションの際に受信されたマイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックに向けられたクライアント・アクセス要求は、キューに入れられ、マイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックがマイグレーションされた後に実行される。
【0060】
いくつかの実施形態によれば、マイグレーション・データ・ブロックの第1のグループのデータコンテンツへのクライアント・アクセスは、第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている、すべてのマイグレーション・データ・ブロックに対して、また第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットへのマイグレーションをまだ開始していない、すべてのマイグレーション・データ・ブロックに対して可能にされるものとしてよい。
【0061】
いくつかの実施形態によれば、第1のファイル・システム管理ユニットは、上記の態様のうちの1つまたは複数による方法のステップを実行するようにさらに適合され得る。
【0062】
さらなる実施形態によれば、第1のファイル・システムのデータ・マイグレーションを行うためのデータ・ストレージ・システムが実現されるものとしてよく、データ・ストレージ・システムは複数のクライアント・コンピュータと、第1のファイル・システムを管理し、複数のクライアント・コンピュータに接続されるようにするための第1のファイル・システム管理ユニットと、第2のファイル・システムを管理し、第1のファイル・システム管理ユニットに接続されるようにするための第2のファイル・システム管理ユニットとを備え、第2のファイル・システムは複数のデータ・ファイルを備え、第1のファイル・システムは複数の外部リンク・オブジェクトを備え、第1のファイル・システムの各外部リンク・オブジェクトは第2のファイル・システムのそれぞれのデータ・ファイルへのクライアント・アクセスを可能にするように第2のファイル・システムのそれぞれのデータ・ファイルに関連付けられる。
【0063】
第1のファイル・システム管理ユニットは、第2のファイル・システムの第1のファイルのファイルコンテンツデータをマイグレーション・データ・ブロックの第1のグループに分割し、第2のファイル・システムの第1のファイルのファイルコンテンツデータを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックの単位でマイグレーションするように適合され得る。
【0064】
マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスは、それぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間に一時的に差し控えられ得るが、それぞれのマイグレーション・データ・ブロックのマイグレーションの際に受信されたマイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックに向けられたクライアント・アクセス要求は、キューに入れられ、マイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックがマイグレーションされた後に実行される。
【0065】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループのデータコンテンツへのクライアント・アクセスは、第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている、すべてのマイグレーション・データ・ブロックに対して、また第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットへのマイグレーションをまだ開始していない、すべてのマイグレーション・データ・ブロックに対して可能にされるものとしてよい。
【0066】
いくつかの実施形態によれば、第1のファイル・システム管理ユニットは、上記の態様のうちの1つまたは複数による方法のステップを実行するようにさらに適合され得る。
【0067】
さらなる実施形態によれば、上で説明されているようなデータ・ストレージ・システムで使用するためのファイル・システム・サーバが実現されるものとしてよく、これは上記の態様のうちの1つまたは複数による方法のステップを実行するようにさらに適合される第1のファイル・システム管理ユニットを備える。
【0068】
さらなる実施形態によれば、コンピュータ・プログラム・コード手段を備えるコンピュータ・プログラム製品が提供されるものとしてよく、コンピュータ・プログラム・コード手段は、複数のクライアント・コンピュータと、第1のファイル・システムを管理し、複数のクライアント・コンピュータに接続されるようにするための第1のファイル・システム管理ユニットと、第2のファイル・システムを管理し、第1のファイル・システム管理ユニットに接続されるようにするための第2のファイル・システム管理ユニットとを備えるデータ・ストレージ・システムにおいてファイル・システム管理ユニットの処理ユニットであって、第2のファイル・システムは複数のデータ・ファイルを備え、第1のファイル・システムは複数の外部リンク・オブジェクトを備え、第1のファイル・システムの各外部リンク・オブジェクトは第2のファイル・システムのそれぞれのデータ・ファイルへのクライアント・アクセスを可能にするように第2のファイル・システムのそれぞれのデータ・ファイルに関連付けられる、処理ユニットに、第2のファイル・システムの第1のファイルのファイルコンテンツデータをマイグレーション・データ・ブロックの第1のグループに分割するステップと、第2のファイル・システムの第1のファイルのファイルコンテンツデータを第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックの単位でマイグレーションするステップとを実行させるように構成される。
【0069】
マイグレーション・データ・ブロックの第1のグループのマイグレーション・データ・ブロックのデータコンテンツへのクライアント・アクセスは、それぞれのマイグレーション・データ・ブロックが第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている間に一時的に差し控えられ得るが、それぞれのマイグレーション・データ・ブロックのマイグレーションの際に受信されたマイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックに向けられたクライアント・アクセス要求は、キューに入れられ、マイグレーション・データ・ブロックの第1のグループのそれぞれのマイグレーション・データ・ブロックがマイグレーションされた後に実行される。
【0070】
いくつかの実施形態では、マイグレーション・データ・ブロックの第1のグループのデータコンテンツへのクライアント・アクセスは、第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットにマイグレーションされている、すべてのマイグレーション・データ・ブロックに対して、また第2のファイル・システム管理ユニットから第1のファイル・システム管理ユニットへのマイグレーションをまだ開始していない、すべてのマイグレーション・データ・ブロックに対して可能にされるものとしてよい。
【0071】
いくつかの実施形態によれば、コンピュータ・プログラム製品は、処理ユニットに上記の態様のうちの1つまたは複数による方法のステップを実行させるように構成されているコンピュータ・プログラム・コード手段をさらに備え得る。
【発明を実施するための形態】
【0073】
次に、本発明の好ましい態様および実施形態が、添付の図を参照しつつより詳細に説明される。異なる図面および実施形態における同じもしくは類似の特徴は、類似の参照番号によって参照される。さまざまな好ましい態様および好ましい実施形態に関係する以下の詳細な説明は、本発明の範囲を制限することを意図していないことは理解されるであろう。
【0074】
図1Aは、通信ネットワーク200を介して第2のストレージ装置400に接続されている複数のクライアント・コンピュータ100(クライアント)を備えるデータ・ストレージ・システムの一例を示している。第2のストレージ装置400は、1つまたは複数のファイル・システムを管理するためのファイル・システム管理ユニット410と、ストレージ・ユニット420によって管理される1つまたは複数のファイル・システムのユーザ・データとユーザ・データのメタデータとを記憶するためのストレージ・ユニット420と、バックアップ要求があり次第、または例えば定期的になど、自動的にストレージ・ユニット420に記憶されているデータのバックアップを実行するためのバックアップ・ストレージ・ユニット430とを備える。第2のストレージ装置400は、単一のコンピューティング・デバイスとして、または互いに接続されている複数のデバイスからなるシステムとして実現され得る。例えば、ファイル・システム管理ユニット410は、ネットワーク・アタッチト・ストレージ(NAS)のストレージ・ユニット420および430として1つまたは複数のストレージ・デバイスに接続されている1つまたは複数のファイル・システム・サーバ・コンピュータからなるシステムとして実現され得る。
【0075】
通信ネットワーク200(さらには以下で説明されている通信ネットワーク500、600、および800)は、有線通信ネットワーク(WAN、LAN、ローカル・ファイバ・チャネル・ネットワーク、インターネット・ベースのネットワーク、イーサネット通信ネットワーク、もしくは同様のもの)またはワイヤレス通信ネットワーク(WLANなど)、またはこれらの組合せとして実現され得る。基本的な通信プロトコルは、NFSベースのプロトコルまたはSMB/CIFSベースのプロトコルなどの、ファイバ・チャネル・プロトコルまたはファイル・ベースのプロトコルであるものとしてよい。
【0076】
クライアント100は、通信ネットワーク200を介して第2のストレージ装置400のファイル・システム管理ユニット410によって管理される1つまたは複数のファイル・システムのユーザ・データにアクセスするように適合される。特に、ユーザは、ユーザ個別またはユーザ・グループ個別のアクセス・ポリシー(例えば、ユーザ・アクセス権、ユーザ・グループ・アクセス権、ファイル・システムのパーミッションなど)に応じてネットワーク200を介して第2のストレージ装置400に接続されているクライアント100の各々を介して、データをファイル・システムに書き込み、ファイル・システムからデータを読み出し、ファイル・システム内にファイルおよびディレクトリを作成し、ファイルおよびディレクトリなどのファイル・システムのオブジェクトの属性を設定または読み出し、ファイル・システムのデータを修正し、ファイル・システムのオブジェクトを削除し、ファイル・システムのオブジェクトを移動することができる。
【0077】
いくつかの時点において、例えば、より新しいファイル・システム管理ストレージ装置は、より多くのファイル・システムまたはより大きいファイル・システムを管理し(より大きいデータ記憶空間および/またはより多くのファイル・システム・オブジェクトを使用可能にすることを含む)、より効率的な入出力(I/O)の実行を可能にし、より大きいストレージ・ユニットまたはより効率的なストレージ・デバイス技術を収容するストレージ・ユニットの使用を可能にするように適合され得るので、データ・ストレージ・システム全体の性能を改善するために第2のストレージ装置400を別の新しいファイル・システム管理ストレージ装置と交換することが望ましい場合がある。それでも、ファイル・システム構造(既存のファイル・ツリー構造など)およびそのユーザ・データ(ファイル・コンテンツ)を含むすでに存在しているファイル・システム(複数可)を保持することが望ましい場合があるが、原理上、ユーザが中断なしで、または少なくとも、できる限り短い単一の中断のみで既存のファイル・システム(複数可)にアクセスすることを可能にすることが望ましい。
【0078】
本発明のいくつかの好ましい態様によれば、既存のファイル・システム(複数可)を管理するためにより古いレガシーの第2のストレージ装置400の代わりに使用されるものとする、より新しい第1のストレージ装置300は、短い単一のサービス中断のみで、アクセスするクライアント100と
図1Bに例示的に示されているようなレガシーの第2のストレージ装置400との間に相互接続されるということが基本的な考え方である。
【0079】
図1Bは、本発明の好ましい態様により通信ネットワーク200と第2のストレージ装置400との間において追加の第1のストレージ装置300を相互接続している
図1Aのデータ・ストレージ・システムの一例を示している。第1のストレージ装置300は、1つまたは複数のファイル・システムを管理するためのファイル・システム管理ユニット310と、ストレージ・ユニット320によって管理される1つまたは複数のファイル・システムのユーザ・データとユーザ・データのメタデータとを記憶するためのストレージ・ユニット320と、バックアップ要求があり次第、または例えば定期的になど、自動的にストレージ・ユニット320に記憶されているデータのバックアップを実行するためのバックアップ・ストレージ・ユニット330とを備える。第1のストレージ装置300は、単一のコンピューティング・デバイスとして、または互いに接続されている複数のデバイスからなるシステムとして実現され得る。例えば、ファイル・システム管理ユニット310は、ネットワーク・アタッチト・ストレージ(NAS)のストレージ・ユニット320および330として1つまたは複数のストレージ・デバイスに接続されている1つまたは複数のファイル・システム・サーバ・コンピュータからなるシステムとして実現され得る。
【0080】
通信ネットワーク200と第2のストレージ装置400との間で第1のストレージ装置300を相互接続するためには、ファイル・システム・サービスの短い中断が1回だけ必要であり、その中断の際にクライアント100の接続が切断され、クライアント100は短い期間、既存のファイル・システム(複数可)にアクセスできない、すなわち、クライアント100は、ユーザ・データの読み出し、ユーザ・データの書き込み、ファイルおよびディレクトリなどの新規ファイル・システム・オブジェクトの作成、またはファイル・システム・オブジェクト属性へのアクセスを行うことができない。
【0081】
通信ネットワーク200と第2のストレージ装置400との間で第1のストレージ装置300を相互接続した後、クライアント100は、第2のストレージ・システム400から接続が切断されたままであり、したがって、第2のファイル・ストレージ装置400によって管理されるファイル・システム(複数可)に直接アクセスすることはできず、第1のストレージ装置300を通じて間接的にのみ第2のストレージ装置400によって管理されるファイル・システム(複数可)にアクセスすることができる。好ましい態様によれば、すべてのユーザ・アクセスは、第1のストレージ装置300にのみアドレッシングされ、第2のストレージ装置400への直接的接続は存在しないことが望ましい。
【0082】
最初に、第1のストレージ装置300を相互接続した後に、クライアント100を介してユーザによってアクセスされるべき1つまたは複数のファイル・システムは、第2のストレージ装置400上にそのまま保持され(ファイルを編成するためのファイルおよびディレクトリのユーザ・データを含み、またファイル・システム・オブジェクトのメタデータを含む)、第1のストレージ装置300は、既存のファイル・システム(複数可)のデータを保持しない。
【0083】
ローカルにおいて第1のストレージ装置300上のファイル・システム(複数可)へのすべてのユーザ・アクセス要求を処理し、第2のストレージ装置の接続を切断できるようにするため、すべてのファイル・システム・データ(ユーザ・データおよびファイル・システム・メタデータを含む)が、最終的に、第2のストレージ装置400から第1のストレージ装置300にマイグレーションされる必要があり得る。しかしながら、多数のディレクトリおよびファイルを収容する大きなファイル・システムの場合、そのようなデータ・マイグレーションは、非常に長い時間を要することがあり、データのマイグレーションの際にすべてのファイル・システム・データ(ユーザ・データおよびファイル・システム・メタデータを含む)が第1のストレージ装置300上に存在するまで無効化または差し控えられていた場合、これにより、クライアント100によるファイル・システム(複数可)の望ましくないアクセス不能状態が、不利なほどの長い期間続くことになる。
【0084】
ファイル・システム(複数可)の望ましくないアクセス不能の期間を短縮するために、第1のストレージ・システム300は、第1のストレージ装置300を相互接続した直後に第2のストレージ装置400によって管理されるファイル・システム(複数可)への間接的ユーザ・アクセスを可能にするように適合される。
【0085】
次いで、次の段落で「仮想化」と称されている、第1のストレージ装置300を相互接続した後の第1のフェーズにおいて、第1のストレージ装置300は、ファイル・システム(複数可)のファイル・システム・ツリー(複数可)の仮想化を実行し、そこでは、第2のストレージ・システム400上に存在するファイル・システム(複数可の)のファイル・システム・ツリー(複数可)が、第2のストレージ装置のストレージ・ユニット420上に記憶されているユーザ・データを実際にマイグレーションすることなく第1のストレージ装置300上に仮想的に作成される。
【0086】
次の段落で「マイグレーション」と称される、第2のフェーズにおいて、ファイルおよび同様のものの実際のデータコンテンツを含む実際のユーザ・データが、第2のストレージ装置400から第1のストレージ装置300に転送される。
【0087】
仮想化フェーズおよびマイグレーション・フェーズの両方が完了した後、第1のストレージ装置300は、仮想化フェーズおよびマイグレーション・フェーズにおいてファイル・システム(複数可)へのユーザ・アクセスが進行しているせいで、その間変更されている可能性が非常に高い、既存のファイル・システム(複数可)をローカルで処理することができ、第2のストレージ装置400は、その後接続が完全に切断され得る。
【0088】
しかしながら、仮想化フェーズおよびマイグレーション・フェーズの両方において、第2のストレージ装置400は、第1のストレージ装置300によってそのままアクセス可能である必要がある。
【0089】
仮想化フェーズおよびマイグレーション・フェーズは、仮想化フェーズが完了するまでデータ・マイグレーションが開始されない、明確に区別できるフェーズとしていくつかの好ましい態様に関して以下でより詳しく説明されるが、本発明はそのような構成に制限されないこと、およびそれらのフェーズがファイル・システム(複数可)のすでに仮想化されている部分のファイルのファイル・データ・コンテンツのマイグレーションがファイル・システム(複数可)の他の部分について仮想化がまだ進行中である間にすでに実行され得るという点においてタイミングよくオーバーラップすることもあり得ることは理解されるであろう。
【0090】
例として仮想化フェーズおよびマイグレーション・フェーズを明確に区別できるその後実行される動作フェーズと見なすときに、第1のファイル・システム管理ユニット310が第2のストレージ装置400のファイル・システム(複数可)内に存在する各ファイルについてストレージ・ユニット320によって記憶されている外部リンク・オブジェクトを作成するという点において仮想化フェーズで第1のファイル・システム管理ユニット310が第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の仮想化されたファイルのツリー構造を構築するので、第1のストレージ・システム300上の(例えば、ストレージ・ユニット320内に記憶されている)ユーザ・データ(すなわち、ファイルコンテンツ)は存在しない。
【0091】
これらの外部リンク・オブジェクトは、第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)のファイル・システム・オブジェクトとなり、各外部リンク・オブジェクトはファイルの実際のユーザ・データ(すなわち、ファイルコンテンツそれ自体)が第1のストレージ装置300のストレージ・ユニット320にマイグレーションされていない限り第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の対応するファイルへのアクセスを可能にする。
【0092】
第1のストレージ装置300上に存在する外部リンク・オブジェクトを通じて第2のストレージ装置400上に存在するファイル・システム(複数可)のファイルへのユーザ・アクセスの詳細は、以下で説明される。
【0093】
以下の
図1Bから
図1Dの構成のすべてにおける第1および第2のストレージ装置300および400の接続は、さまざまな方法で、例えば、上で説明されている通信ネットワーク200と同様の方法で実現され得るが、異なる複数のファイバ・チャネル内の並列通信を可能にする複数のファイバ・チャネルを有するファイバ・チャネル接続を提供することが特に望ましい場合がある。さらに、例えば、FTPベースのプロトコル、NFSベースのプロトコル(例えば、NFSv3もしくはNFSv4)、またはSMB/CIFSベースのプロトコル、または同様のものなどの、ファイル・ベースの通信プロトコルを使用することが望ましい場合がある。
【0094】
図1Cは、通信ネットワーク200と別の通信ネットワーク500との間で追加の第1のストレージ装置300を相互接続しているデータ・ストレージ・システムの別の例であり、これは複数の第2のストレージ装置400に接続されている。すなわち、
図1Bに示されているようなデータ・ストレージ・システムとの違いは、第1のストレージ装置300が、複数のすでに存在しているレガシーのストレージ装置400との交換のため使用されるものとしてよく、各々クライアント100によってアクセスされるべき1つまたは複数のファイル・システム(複数可)を管理している、という点である。第1のストレージ装置300は、複数のレガシーのストレージ装置400によって管理されるファイル・システムの仮想化およびマイグレーションを実行するように適合される。
【0095】
仮想化フェーズおよびマイグレーション・フェーズの両方が完了した後、第1のストレージ装置300は、仮想化フェーズおよびマイグレーション・フェーズにおいてファイル・システム(複数可)へのユーザ・アクセスが進行しているせいで、その間変更されている可能性が非常に高い、既存のファイル・システムをローカルで処理することができ、第2のストレージ装置400のうちの1つまたは複数またはすべてが、その後接続が完全に切断され得る。しかしながら、仮想化フェーズおよびマイグレーション・フェーズの両方において、第2のストレージ装置400は、第1のストレージ装置300によってそのままアクセス可能である必要がある。
【0096】
図1Cの例において、場合によってはその後のマイグレーション・フェーズなしで第1のストレージ装置300によるファイル・システムの仮想化を実行するだけでも有利ですらあり得ることは明らかである。例えば、レガシーのストレージ装置400によって管理されるすべてのファイル・システムの仮想化の完了後に、ファイル・システムの実際のユーザ・データ(ファイルコンテンツ)がレガシーのストレージ装置400のストレージ・ユニットにのみ依然として記憶される間、複数のレガシーのストレージ装置400のすべてのファイル・システムは、第1のストレージ装置300によって単一のアクセス・ポイントとして管理される仮想化されたファイル・システムを通じてクライアント100によってアクセスされ得る。
【0097】
図1Dは、データ・ストレージ・システムの別の例を示している。ここでもまた、クライアント100は、通信ネットワーク200を介して第1のストレージ装置300に接続され、第1のストレージ装置300は、別の通信ネットワーク500を介して第2の(レガシーの)ストレージ装置300に接続される。それに加えて、第1のストレージ装置300は、さらに別の通信ネットワーク800を介してリモート・ストレージ装置900に接続され、第2のストレージ装置400は、さらに別の通信ネットワーク600を介して別のリモート・ストレージ装置700に接続される。
【0098】
そのような構成もリモート・データ・レプリケーションを可能にし、そこでは、第1のストレージ装置300のストレージ・ユニット320に記憶されているユーザ・データは、通信ネットワーク800を介して第1のリモート・ストレージ装置900のストレージ・ユニットにリモート・レプリケーションされ、第2のストレージ装置400のストレージ・ユニット420に記憶されているユーザ・データは、通信ネットワーク600を介して第2のリモート・ストレージ装置700のストレージ・ユニットにリモート・レプリケーションされ得る。もちろん、ネットワーク800および600を介したデータのリモート・レプリケーションは、同期的に、または非同期的に実行され得る。
【0099】
原理上、多数のレガシーのデータ・ストレージ・システムに対して、第1のサイトにある第2のストレージ装置400と第2のストレージ装置400によって管理されるファイル・システム(複数可)のユーザ・データの同期または非同期リモート・レプリケーション用のリモート・ストレージ装置700とを有する構成が存在する。
図1Bに関連して上で説明されているような第1のストレージ装置300を相互接続した後に、第1のストレージ装置300は、第2のストレージ装置400によって管理されるファイル・システム(複数可)の仮想化を実行するが、マイグレーション・フェーズが開始するまでユーザ・データを実際にはマイグレーションしない。
【0100】
例示的な一実施形態によれば、マイグレーションなしの仮想化フェーズにおいて、書き込みアクセス、属性変更ユーザ・アクセス、新規ファイルおよびディレクトリの作成、名前変更の操作などのすべてのデータ修正ユーザ要求を含む、クライアント100によるファイル・システム(複数可)へのすべてのユーザ・アクセスが、第2のストレージ装置400にパススルーされ、第2のストレージ・システム400は、ファイル・システム(複数可)の現在の(標準的な)バージョンを管理し続ける。そのような実施形態において、ファイル・システム(複数可)の標準的なデータ・バージョンは第2のストレージ装置400上に完全に保持され、ストレージ装置900に同期または非同期方式でレプリケーションされ、リモート・ストレージ装置900は、後で接続され得るので、クライアント100によるファイル・システム(複数可)へのすべてのデータ修正ユーザ・アクセスが第2のストレージ装置400にパススルーされる限り、第1のストレージ装置300からリモート・ストレージ装置900へのデータ・レプリケーションを実行する必要はない。
【0101】
しかしながら、マイグレーションが、仮想化中に(またはその後に)すでに開始されており、完全にマイグレーションされていて、第1のストレージ装置300上に完全に保持されるファイル・システム・オブジェクトに対して、ならびに/または第1のストレージ装置300によって管理されているファイル・システム(複数可)においてのみ実行されている新規ファイルおよび/もしくは新規ディレクトリの作成に対して修正ユーザ・アクセスがもはや第2のストレージ装置400にパススルーされない、いくつかの他の実施形態において、すなわち、ファイル・システムが異なり始め得るときに、リモート・ストレージ装置900への追加のデータ・レプリケーションは、少なくとも、完全にマイグレーションされていて、第1のストレージ装置300上に完全に保持されるファイル・システム・オブジェクトに対して、ならびに/または新規作成されたファイルおよび/もしくは新規作成されたディレクトリに対して望ましいものとなり得る。
【0102】
同様に、上記の構成すべてにおいて、データのバックアップに関して、ファイル・システム(複数可)のまだ標準的であるバージョンが第2のストレージ装置400上にまだ保持され、第2のストレージ装置400のストレージ・ユニット420からバックアップ・ストレージ・ユニット430への標準的なバージョンのバックアップが実行されるときに、クライアント100によるファイル・システム(複数可)へのすべてのデータ修正ユーザ・アクセスが第2のストレージ装置400にパススルーされる限り、第1のストレージ装置300のストレージ・ユニット320からバックアップ・ストレージ・ユニット300へのデータ・バックアップを実行する必要はない。
【0103】
しかしながら、マイグレーションが、仮想化中に(またはその後に)すでに開始されており、完全にマイグレーションされていて、第1のストレージ装置300上に完全に保持されるファイル・システム・オブジェクトに対して、ならびに/または第1のストレージ装置300によって管理されているファイル・システム(複数可)においてのみ実行されている新規ファイルおよび/もしくは新規ディレクトリの作成に対して修正ユーザ・アクセスがもはや第2のストレージ装置400にパススルーされない、いくつかの他の実施形態において、すなわち、ファイル・システムが異なり始め得るときに、リモート・ストレージ・ユニット330への追加のデータ・バックアップは、少なくとも、完全にマイグレーションされていて、第1のストレージ装置300上に完全に保持されるファイル・システム・オブジェクトに対して、ならびに/または新規作成されたファイルおよび/もしくは新規作成されたディレクトリに対して望ましいものとなり得る。
【0104】
図2は、ファイル・システム管理ユニット310の構造の概略図を例示的に示している。ファイル・システム管理ユニット310は、ネットワーク200を介して複数のホスト・デバイス(クライアント・コンピュータ100などの)に接続するための複数のホスト・インターフェース311aから311gを備えるホスト・インターフェース・ユニット311と、ストレージ・ユニット320および330の複数のストレージ・デバイスに接続するための複数のストレージ・インターフェース313Aから312gを備えるストレージ・インターフェース・ユニット312とを具備する。それに加えて、ファイル・システム管理ユニット310は、1つまたは複数の中央演算処理装置と、管理データを含む処理に使用されるデータを一時的に記憶するためのメモリ・ユニット314と、アプリケーション・データおよび管理データを記憶するためのストレージ・デバイス315とを備える処理ユニット313を具備する。
【0105】
図3は、ハードウェア、ソフトウェア、またはこれらの組合せによって実現され得る、ファイル・システム管理ユニット310の仮想化およびマイグレーション・ユニット340の概略機能図を例示的に示している。
【0106】
仮想化およびマイグレーション・ユニット340は、仮想化管理データおよびマイグレーション管理データ(メモリ・ユニット314および/またはストレージ・デバイス315に記憶されている)を管理するための仮想化管理情報テーブル341と、仮想化管理データおよびマイグレーション管理データの(ストレージ・デバイス315および/またはストレージ・ユニット320および/または330への)バックアップを実行するための仮想化管理情報バックアップ・ユニット342とを備える。
【0107】
通信目的に関して、仮想化およびマイグレーション・ユニット340は、クライアント100からアクセス要求を受信し、クライアント100からのアクセス要求に応答するためのクライアント通信ユニット348Aを有する通信ユニット348と、アクセス要求を第2のストレージ装置400のファイル・システム管理ユニット410に発行し、第2のストレージ装置400のファイル・システム管理ユニット410から応答を受信するためのファイル・システム通信ユニット348Bとを備える。
【0108】
仮想化およびマイグレーションを実行するため、仮想化およびマイグレーション・ユニット340は、第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)のファイルのツリー構造を自動的にクローリング(観察)し、第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)内で発見されたファイル・システム・オブジェクトの仮想化を命令する仮想化ジョブを作成するためのクローリング・ユニット343を備える。
【0109】
仮想化およびマイグレーション・ユニット340は、クローリング・ユニット343によって発見されたファイル・システム・オブジェクトを仮想化する仮想化ジョブを実行し、仮想化されたファイル・システム・オブジェクトのマイグレーションを命令するマイグレーション・ジョブを作成するための仮想化ユニット344と、仮想化ユニット344によって仮想化されたファイル・システム・オブジェクトをマイグレーションするマイグレーション・ジョブを実行するためのマイグレーション・ユニット345とをさらに備える。
【0110】
仮想化およびマイグレーション・ユニット340は、ファイル・システムのクローリング、ファイル・システム・オブジェクトの仮想化、およびファイル・システム・オブジェクトのマイグレーションに対するジョブをその後記憶するための複数のジョブ・キュー346A、346B、および346Cをさらに備える。
【0111】
例えば、第1のジョブ・キュー346Aは、ディレクトリ情報ジョブを保持し、第2のジョブ・キュー346Bは、仮想化ジョブを保持し、第3のジョブ・キュー346Cは、マイグレーション・ジョブを保持し得る。すなわち、仮想化およびマイグレーションは、ジョブ・キュー346A内に保持されているジョブに基づきファイル・システムのクローリングを行い(クローリング・ユニット343)、ジョブ・キュー346B内に保持されているジョブに基づきファイル・システム・オブジェクトの仮想化を行い(仮想化ユニット344)、ジョブ・キュー346C内に保持されているジョブに基づきファイル・システム・オブジェクトのマイグレーションを行う(マイグレーション・ユニット345)ための異なるユニットが用意されるという点においてマルチスレッドおよび/または並列化方式で実行され得る。
【0112】
上述のユニットは、クローリング・ユニット343が、ジョブ・キュー346Aから取り出された複数のクローリング・ジョブ(例えば、以下でさらに説明されているようなディレクトリ情報ジョブ)を並列に実行するように適合され、仮想化ユニット344が、ジョブ・キュー346Bから取り出された複数の仮想化ジョブを並列に実行するように適合され、マイグレーション・ユニット345が、ジョブ・キュー346Cから取り出された複数のマイグレーション・ジョブを並列に実行するように適合され得るという点においてマルチスレッド化されているものとしてよい。
【0113】
しかしながら、本発明は、上で説明されているような3つのキューの使用に限定されず、ディレクトリ情報ジョブ、仮想化ジョブ、およびマイグレーション・ジョブの各々に対する複数のジョブ・キュー、または例えば、ディレクトリ情報ジョブ、仮想化ジョブ、およびマイグレーション・ジョブのすべてに対して1つのキューが用意されるという点において3つよりも少ないキューが用意され得る。キューがただ1つである後者の場合において、クローリング・ユニット343、仮想化ユニット344、およびマイグレーション・ユニット345は、単一のジョブ・キューから取り出された複数のジョブを実行するように適合され、すべての新規作成されたジョブ(同じキューへのディレクトリ情報ジョブ、仮想化ジョブ、およびマイグレーション・ジョブを含む)を追加する単一のマルチスレッド・ユニットとして実現され得る。
【0114】
「ディレクトリ情報ジョブ」は、クローリング・ユニット343によって発見された第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の特定のディレクトリに関連付けられたジョブであり、この「ディレクトリ情報ジョブ」は第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の特定のディレクトリ内のファイル・システム・オブジェクト(サブディレクトリおよびファイルを含む)を観察することをクローリング・ユニット343に命令する。
【0115】
「仮想化ジョブ」は、クローリング・ユニット343によって発見された第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の特定のファイル・システム・オブジェクト(ファイルまたはディレクトリなど)に関連付けられたジョブであり、「仮想化ジョブ」は第1のストレージ装置300上で特定のファイル・システム・オブジェクトを仮想化することを仮想化ユニット344に命令する。
【0116】
基本的に、クローリング・ユニット343によって発見されたディレクトリの仮想化は、対応するディレクトリ(同じ名前を有する)が第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)内に作成されることを意味するが、クローリング・ユニット343によって発見されたファイルまたは類似のオブジェクト(ハード・リンクされたファイルなど)の仮想化は、外部リンク・オブジェクト(以下ではXLOと略される)と称される仮想オブジェクトが、対応するファイルを有する第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)のディレクトリに対応する第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)のディレクトリ内に作成されることを意味する。
【0117】
「外部リンク・オブジェクト」は、ファイルまたは類似のオブジェクト(ハード・リンクされたファイルなど)に関連付けられている第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)内に存在するオブジェクトである。「外部リンク・オブジェクト」は、対応するファイルの実際のユーザ・データを記憶しないが、第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)内の対応するファイルへの外部参照を含む。第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)の「外部リンク・オブジェクト」が第1のファイル・システム管理ユニット310によって管理されるファイル・システム(複数可)内の第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の対応するファイルを表し、対応するファイルへのアクセスを可能にする。
【0118】
「外部リンク・オブジェクト」は、少なくとも、第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)内の対応するファイルに使用されるリモート・オブジェクトIDに関する情報および第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)内のファイルのリモート・パスに関する情報を含み得る。
【0119】
「マイグレーション・ジョブ」は、仮想化ユニット344によって仮想化された第2のストレージ装置400のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)の特定のファイルまたは類似のオブジェクト(ハード・リンクされたファイルなど)に関連付けられたジョブであり、「マイグレーション・ジョブ」は特定のファイルまたは類似のオブジェクトを第1のストレージ装置300にマイグレーションすることをマイグレーション・ユニット345に命令する。すなわち、マイグレーション・ジョブを実行して特定のファイルをマイグレーションすることをマイグレーション・ユニット345に命令することによって、実際のユーザ・データはファイルコンテンツとして第1のストレージ装置300に転送されストレージ・ユニット320に記憶される。
【0120】
ジョブが、ジョブ・キューがジョブで占有されている間に作成される場合、ジョブ・キュー346Aから346Cのうちの1つまたは複数が占有されるときにディレクトリ情報ジョブ、仮想化ジョブ、およびマイグレーション・ジョブを一時的に記憶するためのバッファ・ユニット347が用意されている。ジョブが、バッファ・ユニット347によって保持されるときに、それらのジョブは、別のジョブが実行され、ジョブ・キューから取り除かれた後、それぞれのジョブ・キューに加えられる。
【0121】
「仮想化」、「マイグレーション」、「外部リンク・オブジェクト」、「ディレクトリ情報ジョブ」、「仮想化ジョブ」、および「マイグレーション・ジョブ」という用語に関連したさらなる例示的な詳細は、以下のより詳細な説明および例の説明において明らかになる。
【0122】
図4は、
図1Aおよび
図1Bの第2のファイル・システム管理ユニット410によって例示的に管理されているようなファイル・システムのファイル・システム・ツリー構造の一例を示している。特に、第2のファイル・システム管理ユニット410によって管理され、
図1Aのストレージ・ユニット420に記憶されているファイル・システムは、第2のストレージ装置400の接続を切断し、第1のファイル・システム管理ユニット310によって管理されるべき第1のストレージ装置300上でファイル・システムの仮想化を開始する前に第1のストレージ装置300を相互接続するときに、
図4の構造を有すると例示的に仮定される。
【0123】
図4の例示的なファイル・システムは、最上位のディレクトリ/rootおよび複数のサブディレクトリを有する。特に、子ディレクトリ/dir1および/dir2は、ファイル「file1」および「file2」に加えて/rootディレクトリ内に存在する。すなわち、/rootディレクトリは、子ディレクトリ/dir1および/dir2の親ディレクトリを表す。ディレクトリ/dir1は、子ディレクトリ/dir11および/dir12を有し、ディレクトリ/dir2は、1つの子ディレクトリ/dir21およびファイル「file3」を有する。ディレクトリ/dir11の子ディレクトリ/dir111には、ファイル「file9」および「file10」が存在する。さらに、ファイル「file4」は、ディレクトリ/dir11に記憶され、ファイル「file5」および「file6」は、ディレクトリ/dir12内に存在する。最後に、ディレクトリ/dir21は、「file7」および「file8」を有する。
【0124】
第1のストレージ装置300が、例えば
図1B、1C、または1Dに示されているようにクライアント100と第2のストレージ装置400との間に相互接続された後、第2のファイル・システム管理ユニット410によって管理され、
図1Aのストレージ・ユニット420に記憶されているファイル・システムの仮想化は、初期仮想化パスが作成されると直ちに開始されるものとしてよく、その仮想化パスは、第1のストレージ装置300の第1のファイル・システム管理ユニット310によって管理されるファイル・システム内の1つの新規作成されたディレクトリ(例えば、最上位のディレクトリ)を仮想化されおよび/またはマイグレーションされるべき第2のストレージ装置400の第2のファイル・システム管理ユニット410によって管理されるファイル・システムの部分の最上位のディレクトリに関連付ける。
【0125】
例えば、第1のストレージ装置300上に以前のファイル・システムが存在していない場合、新規の最上位のディレクトリ/rootが、第1のストレージ装置300の第1のファイル・システム管理ユニット310によって管理されるファイル・システム内に作成され、新規に確立された仮想パスによって第2のストレージ装置400の第2のファイル・システム管理ユニット410によって管理されるファイル・システムの最上位のディレクトリ/rootに関連付けられ、その結果、/rootよりも下位であるディレクトリを有するすべてのファイル・システム・オブジェクトのツリー構造の仮想化が行われ得る。
【0126】
図5は、
図4のツリー構造に基づく仮想化されたファイル・システムのツリー構造の一例を示しており、そこでは、第1のファイル・システム管理ユニット310によって管理されるファイル・システムの最上位のディレクトリ/rootは、第1の仮想パス<ストレージ装置300>:/root −> <ストレージ装置400>:/rootに従って第2のファイル・システム管理ユニット410によって管理されるファイル・システムの最上位のディレクトリ/rootに関連付けられている。
【0127】
第1の仮想化パスにより第2のファイル・システム管理ユニット410のファイル・システムの完全な仮想化の後、第1のファイル・システム管理ユニット410は、
図5によるツリー構造を有するファイル・システムを管理し、そこでは、第2のファイル・システム管理ユニット410によって管理されるファイル・システムのディレクトリ/dir1、/dir2、/dir11、/dir12、/dir21、および/dir111の各々が、第1のファイル・システム管理ユニット310によって管理されているようなファイル・システムにおいても作成されており、このファイル・システムはディレクトリ/dir1および/dir2が最上のディレクトリ/rootの子ディレクトリとして作成され、ディレクトリ/dir11および/dir12がディレクトリ/dir1の子ディレクトリとして作成され、というように続く点において同じツリー構造を有する。
【0128】
しかしながら、ファイル(およびハード・リンクされたファイルなど類似のオブジェクト)に関しては、第1のストレージ装置300内の第1のファイル・システム管理ユニット310によって管理されるファイル・システムは、仮想化の後に実際のファイルを有しないが、第2のストレージ装置300内の第2のファイル・システム管理ユニット410によって管理されるファイル・システムの各ファイルに対してそれぞれの外部リンク・オブジェクトXLOを有する。
【0129】
したがって、仮想化が完了した後、第2のストレージ装置400内の第2のファイル・システム管理ユニット410によって管理されるファイル・システムのそれぞれのファイルfile1、file2、file3、file4、file5、file6、file7、file8、file9、およびfile10の代わりに、外部リンク・オブジェクトXLO1、XLO2、XLO3、XLO4、XLO5、XLO6、XLO7、XLO8、XLO9、およびXLO10が、第1のストレージ装置300内の第1のファイル・システム管理ユニット310によって管理されるファイル・システム内に存在する。第1のファイル・システム内の外部リンク・オブジェクトは、クライアントにファイルとして提示される、すなわち、クライアントは第1のファイル・システム内の外部リンク・オブジェクトを見ることはできないが、実際のファイル名、例えば、「file1」、「file2」、「file3」、「file4」、「file5」、「file6」、「file7」、「file8」、「file9」、および「file10」が見える。それぞれの外部リンク・オブジェクトの各々は、それぞれのファイルを有する第2のストレージ装置400内の第2のファイル・システム管理ユニット410によって管理されるファイル・システムのそれぞれのディレクトリに対応する第1のストレージ装置300内の第1のファイル・システム管理ユニット310によって管理されるファイル・システムのディレクトリ内に存在する。
【0130】
例えば、file10は、第2のストレージ装置400内の第2のファイル・システム管理ユニット410によって管理されるファイル・システム内のリモート・パス/root/dir1/dir11/dir111/file10内に存在しているが、対応する外部リンク・オブジェクトXLO10は、第1のストレージ装置300の第1のファイル・システム管理ユニット310内の対応するローカル・パス/root/dir1/dir11/dir111/XLO10内に存在し、XLO10はfile10を表し、ユーザがアクセス要求を用いて第1のストレージ装置300のファイル・システム内のfile10にアクセスすることを試みたときにfile10への外部アクセスを許す。すなわち、好ましくは、ローカル・パス名は、リモート・パスと同じであり、クライアントの観点から、仮想化された第1のファイル・システムは、第2のファイル・システムから区別できないものとしてクライアントには見えている。
【0131】
図6Aは、ファイル(またはハード・リンクされたファイル)に対する外部リンク・オブジェクト1100の例示的な概略データ構造を示している。外部リンク・オブジェクト1100は、例示的に、外部ファイル・システム内で使用されているような名前、外部ファイル・システム内のファイルのリモート・パス・ロケーション、外部ファイル・システム内で使用されているようなリモート・オブジェクトID、外部ファイル・システム内で使用されているようなリモートInode番号、外部ファイル・システムのリモート・ファイル・システムID(例えば、複数のファイル・システムが第2のファイル・システム管理ユニット410によって処理される場合)、およびファイル・データコンテンツが記憶されるストレージ・ユニット420のデバイスを示すリモート・デバイスIDを含む第2のファイル・システム管理ユニット410によって管理されるような外部ファイル・システムに関するファイルに関するメタデータを有する第1の情報セクション1110を備える。
【0132】
それに加えて、第1の情報セクション1110は、例示的に、第2のストレージ装置400内の第2のファイル・システム管理ユニット410によって管理されるような外部(リモート)ファイル・システム内のファイルのユーザ・データの論理的な長さ(データ・サイズ、ファイルコンテンツ)を示す、ファイルのリモート長をさらに含む。ファイルの長さは、バイトおよびキロバイトなどの記憶単位またはブロック数の単位で与えられ得る(ただし、データを第2のストレージ装置400内の第2のファイル・システム管理ユニット410によって管理されるファイル・システムに記憶するためのデータ・ブロックの実際のデータ・サイズが知られているか、または登録されている場合)。
【0133】
名前およびリモート・パス・ロケーションおよび/またはリモート・オブジェクトIDを参照することによって、外部リンク・オブジェクトは、ユーザが外部ファイル・システム内で使用されているような名前およびリモート・パス・ロケーションおよび/またはリモート・オブジェクトIDを参照するアクセス要求によってファイルにアクセスすることを試みるときに、外部ファイル・システム内のファイルへのアクセスを可能にする。
【0134】
外部リンク・オブジェクト1100は、例示的に、ローカル・ファイル・システム内で使用されているような名前、内部ファイル・システム内の外部ファイル・オブジェクトのローカル・パス・ロケーション、内部ファイル・システム内で使用されているようなローカル・オブジェクトID、内部ファイル・システム内で使用されているようなローカルInode番号、内部ファイル・システムのローカル・ファイル・システムID(例えば、複数のファイル・システムが第1のファイル・システム管理ユニット310によって処理される場合)、およびファイル・データコンテンツが記憶されるか、またはデータ・ブロックがデータの後からのマイグレーションのためにすでに割り当てられているものとしてよい、ストレージ・ユニット320のデバイスを示すローカル・デバイスIDを含む第1のファイル・システム管理ユニット310によって管理されるような内部(ローカル)ファイル・システムに関するファイルに関するメタデータを有する第2の情報セクション1120をさらに備える。
【0135】
それに加えて、第2の情報セクション1120は、ストレージ・ユニット420にすでに転送され記憶されている記憶済みのファイルコンテンツデータのサイズに対応するオブジェクト・ストア長を示し得る(すなわち、ファイルのオブジェクト・ストア長が外部ファイル・システム上のファイルの長さに対応するときに、このことは実際のファイルコンテンツのすべてのデータが完全にマイグレーションされていることを意味する)。マイグレーションを開始する前に、転送される実際のファイルコンテンツデータはないので、オブジェクト・ストア長は、仮想化時にはゼロのままである。オブジェクト・ストア長は、バイトまたはキロバイトなどの記憶単位またはブロック数の単位で与えられ得る。
【0136】
それに加えて、第2の情報セクション1120は、第1のストレージ装置300内の第1のファイル・システム管理ユニット310によって管理されるような内部(ローカル)ファイル・システム内のファイルのユーザ・データの論理的な長さ(データ・サイズ、ファイルコンテンツ)を示す、リモート・ファイルの論理的な長さに等しいものとしてよい、ファイルのローカル長を示し得る。ファイルのローカル長は、バイトおよびキロバイトなどの記憶単位またはブロック数の単位で与えられ得る(もちろん、データを第1のファイル・システム管理ユニット310によって管理されるファイル・システムに記憶するためのデータ・ブロックの実際のデータ・サイズが知られているが、ただし、外部ファイル・システム管理と外部ファイル・システム管理とではブロック・サイズが異なり得ることに留意されたい)。
【0137】
上述の「ファイルのローカル長」および「オブジェクト・ストア長」に関して、「ファイルのローカル長」は、ストレージ・ユニット320上のファイルによって論理的に占有される記憶領域の量を示し、「オブジェクト・ストア長」は、ファイルのユーザ・データのうちどれだけがストレージ・ユニット320にマイグレーションされているかを示すことに留意されたい。
【0138】
上記において、ローカルの「ファイルの長さ」は、第1のファイル・システム内のファイルの論理的なファイル長を表し、以下の説明におけるリモート「ファイルの長さ」は、第2のファイル・システム内のファイルの論理的なファイル長を表し、ローカル・オブジェクト・ストア長は、ローカル・オブジェクト・ストア長がマイグレーションされるべき次のデータ・マイグレーション・ブロックのオフセットを示すという点においてファイルに対するデータ・マイグレーションの進捗を示すために使用され得ることに留意されたい。ファイルが第1のファイル・システムに完全にマイグレーションされているかどうか(すなわち、第1のファイル・システムによって完全に所有されているかどうか)を検出することは、リモート「ファイルのローカル長」とローカル「オブジェクト・ストア長」とを比較することによって実行されるものとしてよく、ローカル「ファイルの論理的な長さ」は、使用される必要はない。
【0139】
「ファイルのローカル長」および「オブジェクト・ストア長」は、等しいサイズであってもよいが、それらのパラメータは状況に応じて異なることもあり得ることに留意されたい。例えば、100kBのデータコンテンツのファイルが、ストレージ・ユニット320にマイグレーションされるものとする場合、ファイルのデータコンテンツが、例えば、100kBのコンテンツ全体が完全にマイグレーションされてしまうまで4つのブロックが最終的に連続的にマイグレーションされるように25kBのブロックで転送され得る。25kBの第1のブロックを受信し、受信された第1のブロックをストレージ・ユニット320に書き込むときに、第1のファイル・システム管理ユニット310は、ストレージ・ユニット320内のファイルコンテンツ全体に対して100kBの記憶領域をすでに割り振ることができ、第1のブロックのコンテンツを割り振られた記憶領域に書き込んだ後、それぞれの「オブジェクト・ストア長」は、サイズ25kBとなるが、それぞれの「ファイルの長さ」は、すでに100kBに達する。
【0140】
外部リンク・オブジェクト1100は、例示的に、現在のタイム・スタンプ(ファイルへの最後の修正アクセスの時刻を示す)、ファイルのリンク・カウント、ファイルの長さ(外部ファイル・システム内の、すなわち、セクション1110のファイルのリモート長に対応する)、およびさらなるファイル属性を含むファイルの属性に関するメタデータを有する第3の情報セクション1130をさらに備える。ファイル属性は、第3の情報セクション1130内に外部リンク・オブジェクトとともに記憶されるので、クライアント100を介してユーザから送信された属性要求は、外部リンク・オブジェクトが作成されるとすぐに、すなわち、ファイルが仮想化されるとすぐに、第1のファイル・システム管理ユニット310によってローカルで、都合よく、効率的に処理され得る。
【0141】
図6Bは、仮想化されたディレクトリに対するメタデータの例示的な概略データ構造1200を示している。ディレクトリ・メタデータ1200は、例示的に、外部ファイル・システム内で使用されているような名前、外部ファイル・システム内のディレクトリのリモート・パス・ロケーション、外部ファイル・システム内で使用されているようなリモート・オブジェクトID、外部ファイル・システム内で使用されているようなリモートInode番号、外部ファイル・システムのリモート・ファイル・システムID(例えば、複数のファイル・システムが第2のファイル・システム管理ユニット410によって処理される場合)、およびディレクトリが記憶されるストレージ・ユニット420のデバイスを示すリモート・デバイスIDを含む外部ファイル・システムに関するディレクトリに関するメタデータを有する第1の情報セクション1210を備える。
【0142】
ディレクトリ・メタデータ1200は、例示的に、ローカル・ファイル・システム内で使用されているような名前、内部ファイル・システム内のディレクトリのローカル・パス・ロケーション、内部ファイル・システム内で使用されているようなローカル・オブジェクトID、内部ファイル・システム内で使用されているようなローカルInode番号、内部ファイル・システムのローカル・ファイル・システムID(例えば、複数のファイル・システムが第1のファイル・システム管理ユニット310によって処理される場合)、およびディレクトリが記憶されるストレージ・ユニット320のデバイスを示すローカル・デバイスIDを含む第1のファイル・システム管理ユニット310によって管理されるような内部(ローカル)ファイル・システムに関するディレクトリに関するメタデータを有する第2の情報セクション1220をさらに備える。
【0143】
ディレクトリ・メタデータ1200は、例示的に、現在のタイム・スタンプ(ディレクトリへの最後の修正アクセスの時刻を示す)、ディレクトリの実リンク・カウント、ディレクトリのフェイク・リンク・カウント、およびさらなるディレクトリ属性を含むディレクトリの属性に関するメタデータを有する第3の情報セクション1230をさらに備える。ディレクトリ属性は、第3の情報セクション1230内にディレクトリ・メタデータとともに記憶されるので、クライアント100を介してユーザから送信された属性要求は、ディレクトリおよびそのメタデータが作成されるとすぐに、すなわち、ディレクトリが仮想化されるとすぐに、第1のファイル・システム管理ユニット310によってローカルで、都合よく、効率的に処理され得る。
【0144】
ディレクトリのリンク・カウント(実リンク・カウントおよびフェイク・リンク・カウント)の属性に関して、フェイク・リンク・カウントは、それぞれのディレクトリが仮想化され、その子ディレクトリのすべても仮想化された後にゼロに等しいパラメータであるが、子ディレクトリのすべてがまだ仮想化されてしまっていない仮想化されたディレクトリについて(すなわち、外部ファイル・システム内のそれぞれのディレクトリの少なくとも1つの子ディレクトリがローカル・ファイル・システムのそれぞれのディレクトリ内の対応するディレクトリをまだ有していない場合)、フェイク・リンク・カウントは、非ゼロとなり、リンク・カウント属性要求に応答してユーザに返されるべきリンク・カウントは、上記の実リンク・カウントとフェイク・リンク・カウントとの総和であることに留意されたい。
【0145】
特に、第1のストレージ装置300上のローカルに仮想化されたディレクトリのリンク・カウントに関係する属性要求を確実に、効率的に、正しく処理できるようにするために、仮想化の際にディレクトリを作成するときに、自己参照リンクがそれぞれのディレクトリ内に作成され、フェイク・リンク・カウントが計算されてディレクトリ・メタデータに書き込まれ、親ディレクトリ・リンクが作成され、親ディレクトリのメタデータ内のフェイク・リンク・カウントが1だけデクリメントされる。
【0146】
したがって、それぞれの親ディレクトリ内に特定のディレクトリを作成するときに、親ディレクトリの内側の特定のディレクトリへのリンクは、ディレクトリ作成を用いて自動的に作成され、自己参照リンク(シングル・ドット・リンクまたは/.など)が作成され、結果として実際のリンク・カウントは2となるが(親ディレクトリ・リンク/..を有する子ディレクトリがまだ作成されていないので)、第2のファイル・システム管理ユニット410によって管理されるようなファイル・システム内の対応するディレクトリの基礎をなす実際のリンク・カウントは実際にはN+2となり、Nは特定のディレクトリの子ディレクトリの個数である。
【0147】
したがって、フェイク・リンク・カウントは、例えば、特定のディレクトリの実リンク・カウントを第2のファイル・システム管理ユニット410に要求し、2を差し引くことによって、第2のファイル・システム管理ユニット410によって管理されるようなファイル・システム内の特定のディレクトリの子ディレクトリの個数Nに基づいて計算され、ディレクトリ・メタデータに書き込まれ得る。次いで、ユーザが特定のディレクトリのリンク番号を要求したときに、第1のファイル・システム管理ユニット310は、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システム上で観察されるような実リンク・カウントと、ディレクトリ・メタデータに記憶されているようなフェイク・リンク・カウントとを単に加算することによって、また実リンク・カウントとフェイク・リンク・カウントとの総和を返すことによって第2のストレージ装置400とのさらなる通信を必要とすることなくローカルで要求を効率的に処理することができる。
【0148】
上記の手順について、仮想化されたディレクトリのメタデータに記憶されているフェイク・リンク・カウントは、その子ディレクトリが自らの仮想化を目的として作成されるときには必ず更新される必要がある。
【0149】
図7は、
図4のファイル・システムのツリーの仮想化が完了した後の仮想化管理情報テーブル341の一例を示している。このテーブルは、4つのデータ・ブロック341aから341dに例示的に分割されており、
図4のファイル・システムのツリー構造のファイル・システム・オブジェクトの各々について1つのエントリを収容する。仮想化管理情報テーブル341は、仮想化管理情報テーブル341内の更新されたデータがブロックでバックアップされるバックアップ・プロセスを実行できるようにブロック341aから341dに記憶される、すなわち、仮想化管理情報バックアップ・ユニット342は、メモリ314に記憶されているブロック341aから341の各々のバックアップ・コピーを繰り返し、連続的に作成し、次いで、バックアップ・コピーをブロック毎にストレージ・デバイス315にコピーする。バックアップ目的で1つの特定のブロックがコピーされるときに、ブロックは、ユニット343、344、および345によって更新され得ず、他のすべてのブロックはアクセス可能なままである。
【0150】
例示的に、
図24のテーブル341で示されているファイル・オブジェクトの各々は、それぞれの外部リンク・オブジェクトが
図5の構造に従って第2のファイル・システム管理ユニット410によって管理されるようなファイル・システムのファイルの各々について存在することを示す仮想化ステータス「virtualized」を有し、各ファイル・オブジェクトは、実際のファイルコンテンツデータは第2のストレージ装置400のストレージ・ユニット420から第1のストレージ装置300のストレージ・ユニット320にまだマイグレーションされていないことを示すオブジェクト・ステータス「needs migration」を有する。
【0151】
図7のテーブル341で示されているディレクトリの各々は、同じ名前のそれぞれのディレクトリが
図4および5の両方のツリー構造に従って第2のファイル・システム管理ユニット410によって管理されるようなファイル・システムのディレクトリの各々について存在することを示す仮想化ステータス「virtualized」を有し、各ディレクトリ・オブジェクトは、そのすべての子オブジェクトも仮想化されていることを示すオブジェクト・ステータス「Complete」を有する。
【0152】
次いで、マイグレーションの第2のフェーズにおいて、クローリング・ユニット343は、仮想化管理情報テーブル341全体を再ウォーキングして、ジョブ・キュー346Cに追加されるべき「needs migration」として示されている各ファイル・オブジェクトについてそれぞれのマイグレーション・ジョブを作成することができ、それにより、マイグレーション・ユニット345は、連続的に、1つまたは複数のマイグレーション・ジョブ(例えば、マルチスレッド・マイグレーション・ユニット345と並行に)を実行し、実際のファイルコンテンツデータを第1のストレージ装置300のストレージ・ユニット320にマイグレーションし得る。
【0153】
代替的に、もちろん、仮想化フェーズの完了前であっても、マイグレーション・フェーズを開始することが可能である。次いで、クローリング・ユニット343または仮想化ユニット344も、すでに仮想化を行っている間にマイグレーション・ジョブを作成し得る。
【0154】
マイグレーションの際にマイグレーション・ユニット345によるパス・ウォーキング(path walking)を回避するために、仮想化ユニット344によって仮想化の際に発見された第2のファイル・システムのファイルのメタデータはキャッシュ・メモリに記憶されるものとしてよく、これはファイル・ハンドルなどのファイル情報を好ましくは含む。
【0155】
図8A、8B、および8Cは、仮想化の初期化およびマイグレーションの初期化のための方法の例示的な流れ図を示している(
図8Aおよび8Bまたは
図8Aおよび8Cの組合せによる)。この方法は、それに加えて、クライアント100から第2のストレージ装置300へのすべてのユーザ/クライアント・アクセスをブロックするステップと(例えば、
図1Aに類似の状況において)、
図8AのステップS1の前の第2のストレージ装置400とクライアント100との間で第1のストレージ装置300を相互接続するステップとを含み得る。
【0156】
仮想化の初期化およびマイグレーションの初期化を行うための方法は、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内に最上位のディレクトリを作成するステップS2と、ステップS2で作成された最上位のディレクトリを仮想化されるべき第2のファイル・システム管理ユニット410によって管理されるファイル・システムの部分の最上位のディレクトリ(例えば、
図4に関して例示されているような最上位のディレクトリまたは下位のディレクトリのうちの1つ)に関連付ける仮想化パスを作成(設定)するステップS1とを含む。
【0157】
さらに、仮想化の初期化を行うための方法は、ステップS2で設定された最上位のディレクトリに対するディレクトリ情報ジョブを作成するステップS4を含む。この方法は、自動バックグラウンド仮想化を可能にするステップS5と、ステップS7で第1のストレージ装置300へのクライアント・アクセスを直接的に可能にする前にユーザ・アクセス依存のオンデマンド仮想化を可能にする別のステップS6をさらに含む。ステップS1からS7の順序は、ステップS5およびS6がステップS1およびS2の後に実行され、ステップS7がステップS6の後に実行されることを条件として、複数の異なる方式で交換され得ることに留意されたい。
【0158】
最も重要なのは、第2のストレージ装置が相互接続され、仮想化パスが設定され(ステップS1)、オンデマンド仮想化が有効化される(ステップS6)とすぐに、ファイル・システムへのユーザ・アクセスが可能にされ得る(ステップS7)ということである。特に、ユーザが、ファイル・システム内のまだ仮想化されていないファイル・システム・オブジェクトにアクセスすることを試みるとすぐに、それぞれのファイル・システム・オブジェクトは、有効化されたオンデマンド仮想化を用いて仮想化され(以下でより詳しく例示的に説明されているように)、それにより仮想化されたファイル・システム・オブジェクトを介してファイル・システム・オブジェクトへのアクセスを可能にし、ユーザがすでに仮想化されているファイル・システム・オブジェクトにアクセスすることを試みた場合、それぞれのファイル・システム・オブジェクトは、それぞれの仮想化されたファイル・システム・オブジェクトを介してアクセスされ得る。
【0159】
したがって、上記の態様によるデータ・ストレージ・システムは、自動バックグラウンド仮想化(以下でより詳しく例示的に説明されているような)がすでに始まっていているかどうかに関係なく、また自動バックグラウンド仮想化のステータスに関係なく仮想化パスが作成され、オンデマンド仮想化が有効化されているという条件の下で第1のストレージ装置300を相互接続した直後にファイル・システムへのユーザ・アクセスを即座に有効化することができる。すなわち、クライアント100によるファイル・システムへのアクセスは、クライアント100と第2のストレージ装置400との間で第1のストレージ装置300を相互接続するための単一の中断の直後に再び有利に有効化され得る。
【0160】
自動バックグラウンド仮想化は、自動的に実行され、その結果、第2のストレージ装置400の第2のファイル・システム管理ユニット410によって管理されるファイル・システム(複数可)のファイルのツリー構造全体が、第1のストレージ装置400上に完全に仮想化される(すなわち、上の
図5に関連して説明されているような仮想化された方式で完全に再構築される)。オンデマンド仮想化は、各ファイル・システム・オブジェクトがユーザによるアクセスを試みられるが、まだ仮想化されておらず、ファイル・システム・オブジェクトが最初に仮想化され、次いでユーザ・アクセスが以下の
図11Aから11Hに関して次に説明されているように実行されるという点においてユーザ・アクセスに基づき実行される。
【0161】
ステップS7でクライアント・アクセスを可能にした後、第2のストレージ装置400のファイル・システム内に存在する完全なファイル・システムのツリー構造が第1のストレージ装置300のファイル・システム内に仮想化された形で存在するとい点において、すなわち、
図4および5における例示的な状況と同様に、第2のストレージ装置400のファイル・システム内に存在する各ファイルが第1のストレージ装置300のファイル・システム内に存在する対応する外部リンク・オブジェクトを有し、第2のストレージ装置400のファイル・システム内に存在する各ディレクトリが第1のストレージ装置300のファイル・システム内に存在する対応するディレクトリを有するときに、仮想化が終了するまで待つことが可能である。
【0162】
次いで、仮想化の終了が確認され(
図8CのステップS8がYESを返す)、マイグレーションの開始が管理者によって命令されたときに(
図8CのステップS9がYESを返す)、この方法は
図8CのステップS10のバックグラウンド・マイグレーションを有効化することを続行する。代替的に、他の実施形態では、ステップS9は、スキップされ、バックグラウンド・マイグレーションは、仮想化の終了が確認される(
図8CのステップS8がYESを返す)とすぐに自動的に有効化され得る(ステップS10)。
【0163】
他の実施形態により、マイグレーション・フェーズが上記の実施形態において終了する前に開始されていない間に、マイグレーション・フェーズは、例えば
図8Bに示されているように仮想化まだ進行中であるときにすでに開始され得る。仮想化およびクライアント・アクセスが可能にされ(
図8AのステップS5、S8、およびS7)、マイグレーションが命令されたときに(
図8BのステップS9がYESを返す)、この方法は、仮想化が終了しているかいないかに関係なく
図8BのステップS10においてバックグラウンド・マイグレーションを有効化することを続行する。
【0164】
原理上、バックグラウンド・マイグレーションは、次のように開始され得る。バックグラウンド・マイグレーションが有効化されるとすぐに(ステップS10)、クローリング・ユニット343は、仮想化管理情報テーブル341をウォークスルーし、オブジェクト・ステータス「needs migration」を有する各ファイルに対してマイグレーション・ジョブを作成し、マイグレーション・ジョブをキュー346Cに入れることができ、マイグレーション・ユニット345は、マイグレーション・ジョブを(例えば、マルチスレッド並行プロセスとして並行して)実行することができる。それに加えて、仮想化手段344は、各作成された外部リンク・オブジェクトに対してその作成後にマイグレーション・ジョブを作成し得る。特定のファイルに対するマイグレーション・ジョブを実行するときに、マイグレーション・ユニット345は、ファイルのデータコンテンツ全体を第2のストレージ装置400から第1のストレージ装置に転送する。
【0165】
図9Aは、バックグラウンド・マイグレーション管理の流れ図の例を示している。クローリング・ユニット343(またはマイグレーション・ユニット345)は、オブジェクト・ステータス「needs migration」を有するファイルに関係するエントリが存在するかどうかについてステップS1001において仮想化管理情報テーブル341をチェックする。そのようなエントリが存在しない場合(ステップS1002がNOを返す)、プロセスは終了する(ステップS1003)か、またはステップS1001を後でまた繰り返す。
【0166】
しかし、オブジェクト・ステータス「needs migration」を有するファイルに関係する少なくとも1つのエントリが、仮想化管理情報テーブル341内に存在する場合(ステップS1002がYESを返す)、この方法は、ステップS1004において仮想化管理情報テーブル341内に存在するオブジェクト・ステータス「needs migration」を有するファイルに関係する1つまたは複数のエントリの次の1つで続行する。
【0167】
次のステップS1005において、この方法は、ファイルのサイズ(すなわち、ファイルのリモート長)およびマイグレーション・データ・ブロックの所定のサイズに基づきマイグレーション・データ・ブロックのグループを決定することを続行する。いくつかの実施形態により、次いで、ファイルのデータは、丸ごと転送されるのではなく、ファイルコンテンツがマイグレーション・データ・ブロック毎に第1のストレージ装置300から第2のストレージ装置400に連続的に転送されるようにマイグレーション・データ・ブロック毎に転送される。
【0168】
いくつかの態様において、マイグレーション・データ・ブロックのサイズは、第1のファイル・システム管理ユニット310によってサポートされているような最大受信ブロック・サイズおよび/または第2のファイル・システム管理ユニット410によってサポートされているような最大受信ブロック・サイズに基づき決定され得る。特に、いくつかの実施形態において、マイグレーション・データ・ブロックのサイズは、第2のファイル・システム管理ユニット410によってサポートされているような最大受信ブロック・サイズおよび/または第1のファイル・システム管理ユニット310によってサポートされているような最大受信ブロック・サイズのうちの最小のサイズとして設定され得る。
【0169】
例えば、第1のファイル・システム管理ユニット310が、75kB以上から175kB以下までのサイズのデータ・ブロックを(第1のファイル・システム管理ユニット310によってサポートされているような例示的な最大受信ブロック・サイズとして)受信するように適合され、第2のファイル・システム管理ユニット410が、50kB以上から150kB以下までのサイズのデータ・ブロックを(第2のファイル・システム管理ユニット410によってサポートされているような例示的な最大送信ブロック・サイズとして)送信するように適合されているときに、マイグレーション・データ・ブロックのサイズは、150kBと175kBのうちの最小値として、すなわち150kBとして決定され得る。
【0170】
実際のファイルのデータコンテンツが1500kBであるファイルが、例えば、150kBのマイグレーション・データ・ブロックのサイズを使用することによってマイグレーションされるものとするときに、ファイルコンテンツは、ステップS1005において決定された10個のマイグレーション・データ・ブロックに分割される。
【0171】
次のステップS1006において、それぞれのマイグレーション・ジョブが、ステップS1005において決定されたマイグレーション・データ・ブロックの各々に対して作成され、ジョブ・キュー346Cに追加され、そこで、これはマイグレーション・ジョブを実行し、データを第2のストレージ装置400から第1のストレージ装置300に転送し、マイグレーション・データ・ブロックのデータをストレージ・ユニット320に記憶するためにマイグレーション・ユニット345によって取得され得る。好ましくは、1つの特定のファイルに関連付けられているマイグレーション・データ・ブロックのグループのマイグレーション・ジョブは正しい順序でジョブ・キュー346Cに追加され、これはマイグレーション・ブロックが正しい順序でマイグレーションされ、正しい順序でストレージ・ユニット320に記憶されるように特定のファイルに関連付けられているマイグレーション・データ・ブロックのグループの最初のブロックから始まり、最後のブロックで終わる。
【0172】
次のステップS1007において、ステップS1004において選択された1つの特定のファイルに関連付けられているマイグレーション・データ・ブロックのグループの各々に対してマイグレーション・ジョブを作成した後に、仮想化管理情報テーブル341内のそれぞれのエントリが更新され、オブジェクト・ステータスは、「migrating」に変更される。
【0173】
図9Aの実施形態では、マイグレーション・ジョブは、特定のファイルに対してマイグレーションされるべき各データ・マイグレーション・ブロックに対して例示的に作成されている。しかしながら、特に、大きなファイルを有するファイル・システムについては、各ファイルに対する複数のマイグレーション・ジョブは、潜在的に多数のマイグレーション・データ・ブロックによりジョブ・キューに過剰に詰め込む可能性がある。そのような状況を回避するために、1つの単一のマイグレーション・ジョブが、例えば以下の
図9Bを参照しつつ説明されているように各ファイルについて作成される一実施形態を提供することが望ましい場合がある。そのような実施形態は、ファイル・システムのすべてのファイルを考慮して、または特定の閾値を超えるファイル・サイズを有するファイルを考慮して実装され得る。
【0174】
図9Bは、1つの単一の仮想化ジョブが各ファイルについて作成されるバックグラウンド・マイグレーション管理の流れ図の別の例を示している。ステップS1001、S1002、S1003、S1004、およびS1007は、
図9Aに関連して上で説明されているのと同様にして実行され得る。しかしながら、ステップS1008において、各マイグレーション・データ・ブロックに対するマイグレーション・ジョブの代わりに単一のマイグレーション・ジョンがステップS1004において選択された特定のファイルに対して作成される。ステップS1004において、それぞれのマイグレーション・ジョブは、特定のファイルに対して作成され、ジョブ・キュー346Cに追加され、そこで、これはマイグレーション・ジョブを実行し、すべてのデータ・マイグレーション・ブロックのデータを第2のストレージ装置400から第1のストレージ装置300に連続的に転送し、マイグレーション・データ・ブロックのデータをストレージ・ユニット320に記憶するためにマイグレーション・ユニット345によって取得され得る。
【0175】
図10Aは、ファイル・データ・マイグレーションの流れ図の例を示している。マイグレーション・ユニット345は、ステップS1101において次のマイグレーション・ジョブがないかジョブ・キュー346Cをチェックし、ステップS1102において次のマイグレーション・ジョブを取得し、マイグレーション・ジョブは
図9AのステップS1005において決定されるように特定のマイグレーション・データ・ブロックに関連してマイグレーションの実行を命令する。
【0176】
次いで、マイグレーション・データ・ブロックのファイルのデータコンテンツへのユーザ・アクセスは、クライアントがマイグレーションの際にマイグレーション・データ・ブロックのファイルのデータコンテンツに一時的にアクセスできないように(すなわち、マイグレーション・データ・ブロックのファイルのデータコンテンツのクライアント・アクセスがそのマイグレーションの際に差し控えられるか、またはキューに入れられるように)ステップS1103において差し控えられる(キューに入れられる)。これは、同じファイルの他のデータ部分、すなわち、同じファイルの他のデータ・マイグレーション・データのデータ(すでに以前にマイグレーションされているか、またはまだマイグレーションを開始していない)が現在マイグレーションされているマイグレーション・データ・ブロックのマイグレーション中であってもクライアント100のユーザによってそのままアクセスされ得るという利点を有する。
【0177】
以下で説明されているステップS1103およびS1111の実行の時間と時間との間でそれぞれのファイル・ブロックへのアクセスを試みるクライアント・アクセスは、クライアント・アクセスが再び可能にされたときに、好ましくは、ステップS1111が実行されるまでクライアントが遅延を観察するという意味で一時的にのみ差し控えられ(またはブロックされ、キューに入れられ)、キューに入れられているアクセスは、クライアントが書き込み要求の実行時にわずかな待ち時間のみを観察し、好ましくはアクセスを試みるクライアント側にエラー応答が返されないようにステップS1111の後に実行されることに留意されたい。すなわち、マイグレーション・ジョブのマイグレーション・データ・ブロックをターゲット・ブロックとして伴うステップS1103の後に受信された1つまたは複数の書き込み要求は、キューに入れられ、ステップS1111の後に実行される。
【0178】
代替的実施形態では、ステップS1103は、マイグレーションされるべきデータ・ブロックに関連付けられている特定のファイルのファイル・データへのユーザ・アクセスを差し控える(キューに入れる)ことができる。そのような実施形態において、他のすべてのファイルへの少なくともユーザ・アクセスは、特定のファイルのデータ・ブロックのマイグレーションにおいて可能にされたままにされ得る。次いで、以下で説明されているステップS1111は、そのような実施形態においてファイルへのユーザ・アクセスを再び可能にする。すなわち、ターゲット・ファイルのファイル・データを伴うステップS1103の後に受信された1つまたは複数の書き込み要求は、キューに入れられ、ステップS1111の後に実行される。
【0179】
ステップS1104において、特定のマイグレーション・データ・ブロックが特定のマイグレーション・データ・ブロックに関連付けられている特定のファイルに関連してマイグレーションされるべき第1のマイグレーション・ブロックであるかどうかがチェックされる。例えば、マイグレーション・ジョブ・データは、マイグレーション・データ・ブロックの総数および特定のマイグレーション・データ・ブロックの番号を示し得る。代替的に、マイグレーション・ユニット345は、対応するファイルが(その関連付けられている外部リンク・オブジェクトに加えて)第1のファイル・システム管理ユニット310のファイル・システム内にすでに存在しているかどうかをチェックすることができる。
【0180】
ステップS1104がYESを返した場合、マイグレーション・ユニット345は、マイグレーション・ジョブで示されているローカル・マイグレーション・パス内に対応するファイルを作成し、ステップS1107において、第2のストレージ装置400から受信される、マイグレーション・データ・ブロックのデータコンテンツをローカル・マイグレーション・パス内のファイルにコピーする。そうでなければ、ステップS1104がNOを返した場合、マイグレーション・ユニット345は、ステップS1107において、第2のストレージ装置400から受信される、マイグレーション・データ・ブロックのデータコンテンツをローカル・マイグレーション・パス内の(すでに存在している)ファイルに直接コピーする。
【0181】
ステップS1107においてマイグレーション・データ・ブロックのデータコンテンツをストレージ・ユニット320に書き込んだ後、ファイルに関係付けられているメタデータは、第1のファイル・システム内のファイルの(ローカル)オブジェクト・ストア長が、例えば、マイグレーションされるマイグレーション・データ・ブロックのブロック・サイズを前のオブジェクト・ストア長に加えることによって、ステップS1112において更新されるという点において更新される。原理上、オブジェクト・ストア長は、ステップS1107の書き込み操作内で更新され得る。また、マイグレーション手順は、マイグレーション書き込みがクライアントに対してシームレスなままでなければならないので、アクセスまたは修正時間(例えば、タイム・スタンプ)などの他のメタデータを更新することを伴わないことに留意されたい。
【0182】
その後マイグレーションされたマイグレーション・データ・ブロックは、同じファイルに関連付けられている他のすべてのマイグレーション・データ・ブロックが以前にすでにマイグレーションされていたのでマイグレーションされるべき最後のマイグレーション・データ・ブロックであったとき(ステップS1108がYESを返す)、同じファイルに関連付けられている外部リンク・オブジェクトは、ステップS1109においてそのローカル・パス・ロケーション内で削除される、すなわち、この特定のファイルに対する第2のファイル・システム管理ユニット410によって管理されるファイル・システムと第1のファイル・システム管理ユニット310によって管理されるファイル・システムとの間のリンクが削除されることになる。次いで、仮想化管理情報テーブル341内の対応するファイルのオブジェクト・ステータスは、ステップS1110において「migrated」に更新され、ファイルのメタデータ内の1つまたは複数のフラグは、ファイルが完全にマイグレーションされていることを示すように更新され得る。
【0183】
上記のステップS1108において、特定のファイルのファイルコンテンツのすべてがファイルのデータコンテンツがストレージ・ユニット320上にすでに完全に保持されるようにすでにマイグレーションされており、特定のファイルのデータコンテンツが第1のファイル・システム管理ユニット310によって管理されるファイル・システム内に完全に存在するかどうかが基本的にチェックされる。いくつかの好ましい実施形態によれば、特定のファイルのファイル・データコンテンツが第2のストレージ装置400から第1のストレージ装置300に完全にマイグレーションされているかどうかに関するステップS1108の決定は、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内の特定のファイルのオブジェクト・ストア長と第2のファイル・システム管理ユニット410によって管理されるファイル・システム内の特定のファイルのファイル長さとの比較結果に基づき実行される(
図6Aおよび上の説明を参照)。
【0184】
特に、いくつかの実施形態によれば、ステップS1108は、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内の特定のファイルのオブジェクト・ストア長が、第2のファイル・システム管理ユニット410によって管理されるファイル・システム内の特定のファイルのファイル長よりも小さい限りNOを返し、ステップS1108は、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内の特定のファイルのオブジェクト・ストア長(ステップS1112において更新されたような)が、第2のファイル・システム管理ユニット410によって管理されるファイル・システム内の特定のファイルのファイル長に等しいときにYESを返す。
【0185】
上記のステップS1109およびS1110を実行した後、対応するファイルは、第1のファイル・システム管理ユニット310によって管理されるファイル・システムのレギュラー・ファイルを表し、ファイルへのすべてのユーザ・アクセスは、最終的なマイグレーションされたマイグレーション・データ・ブロックのデータへのユーザ・アクセスがステップS1111において再び可能にされるとすぐに第1のファイル・システム管理ユニット310によってローカルで処理されるものとしてよく、次いで、この方法は、ターゲット・ファイルのファイル・データを伴うステップS1103の後に受信された1つまたは複数のキューに入れられた書き込み要求がステップS1111の後に実行されることを許すために応じて、次いで、もしあれば、ステップS1101において次のマイグレーション・ジョブを続行する。
【0186】
そうでなければ、ステップS1108がNOを返した場合、すなわち、特定のファイルに対してマイグレーションされるべきなおもさらなるマイグレーション・データ・ブロックがあるときに、この方法は、特定のマイグレーションされたマイグレーション・データ・ブロックのデータへの再度のユーザ・アクセスを可能にするステップS1111を直接続行し、次いで、この方法は、ターゲット・ファイルのファイル・データを伴うステップS1103の後に受信された1つまたは複数のキューに入れられた書き込み要求がステップS1111の後に実行されることを許すために応じて、次いで、もしあれば、ステップS1101において次のマイグレーション・ジョブを続行する。
【0187】
図10Bは、1つの単一のマイグレーション・ジョブがマイグレーションされるべき1つのファイルについて作成される例示的な一実施形態におけるファイルのデータのマイグレーションの流れ図の別の例を示している。マイグレーション・ユニット345は、ステップS1101において次のマイグレーション・ジョブがないかジョブ・キュー346Cをチェックし、ステップS1113において次のマイグレーション・ジョブを取得し、マイグレーション・ジョブは
図9BのステップS1004において決定されるようにマイグレーションされるべき特定のファイルに関連してマイグレーションの実行を命令する。
【0188】
ステップS1105において、マイグレーション・ユニット345は、マイグレーション・ジョブで示されたローカル・マイグレーション・パス内に対応するファイルを作成し、第1のファイル・システム内のファイルのメタデータ内でその(ローカル)オブジェクト・ストア長をゼロに設定する。
【0189】
次いで、マイグレーション・データ・ブロックのファイルのデータコンテンツへのユーザ・アクセス要求は、クライアントがマイグレーション・データ・ブロックのマイグレーションの際にマイグレーションされるべきファイルのファイル・データコンテンツを一時的にアクセスすることができないようにステップS1103においてキューに入れられる(一時的に差し控えられる)。ステップS1103およびS1111の実行の時間と時間との間でそれぞれのファイル・ブロックへのアクセスを試みるクライアント・アクセス要求は、クライアント・アクセスが再び可能にされたときに、好ましくは、ステップS1111が実行されるまでクライアントが遅延を観察するという意味でキューに入れられ(またはブロックされ、一時的に差し控えられ)、好ましくはアクセスを試みるクライアント側にエラー応答が返されないことに留意されたい。すなわち、現在のマイグレーション・データ・ブロックをターゲット・ブロックとして伴うステップS1103の後に受信された1つまたは複数のアクセス要求は、キューに入れられ、ステップS1111の後に実行される。
【0190】
次いで、ステップS1114において、この方法は、オブジェクト・ストア長に基づき決定される次のマイグレーション・データ・ブロックに進む。オブジェクト・ストア長がゼロである場合、第1のマイグレーション・データ・ブロックが選択される。データ・マイグレーション・ブロックおよびそのサイズの決定は、上で説明されている
図9AのステップS1005と同様に実行され得る。その一方で、オブジェクト・ストア長が、非ゼロであり、データ・マイグレーション・ブロック・サイズのN倍の長さを有する場合、データ・マイグレーション・ブロックN+1が、ステップS1114において選択される。
【0191】
ステップS1107において、第2のストレージ装置400から受信された、マイグレーション・データ・ブロックのデータコンテンツは、ローカル・マイグレーション・パス内のファイルにコピーされる。ステップS1107においてマイグレーション・データ・ブロックのデータコンテンツをストレージ・ユニット320に書き込むことに関連して、ファイルに関係付けられているメタデータは、第1のファイル・システム内のファイルの(ローカル)オブジェクト・ストア長が、例えば、マイグレーションされるマイグレーション・データ・ブロックのブロック・サイズを前のオブジェクト・ストア長に加えることによって、ステップS1112において更新されるという点において更新される。原理上、オブジェクト・ストア長は、ステップS1107の書き込み操作内で更新され得る。また、マイグレーション手順は、マイグレーション書き込みがクライアントに対してシームレスなままでなければならないので、アクセスまたは修正時間(例えば、タイム・スタンプ)などの他のメタデータを更新することを伴わないことに留意されたい。
【0192】
ステップS1107においてマイグレーション・データ・ブロックのデータコンテンツをストレージ・ユニット320に書き込み、ステップS1112においてオブジェクト・ストア長を更新した後、ユーザ・アクセスは、ステップS1111において可能にされ、ステップS1103以降に受信され、キューに入れられているファイル・ブロックへのすべてのユーザ・アクセス要求は、ステップS1117において実行される。これは、クライアントから送信されたキューに入れられているアクセス要求が、ブロックの各マイグレーションの後に実行される(サービスされる)ものとしてよく、ファイルの完全なマイグレーションまで差し控えられる必要はないという利点を有する。したがって、あまりにも長い期間にわたって、特に大きなファイルをマイグレーションするときに、ユーザ・アクセスを差し控えることが回避され得る。
【0193】
その後マイグレーションされたマイグレーション・データ・ブロックが、同じファイルに関連付けられている他のすべてのマイグレーション・データ・ブロックが以前にすでにマイグレーションされていたという理由でマイグレーションされるべき最後のマイグレーション・データ・ブロックであったときに(ステップS1108がYESを返す)、ステップS1109およびS1110は、上で説明されている
図10Aと同様に実行される。そうでなければ、ステップS1108がNOを返した場合、すなわち、特定のファイルに対してマイグレーションされるべきなおもさらなるマイグレーション・データ・ブロックがあるときに、この方法は、ファイルへのユーザ・アクセス要求をキューに入れる(一時的に差し控える)ステップS1103およびこの方法がステップS1112において更新されるようなオブジェクト・ストア長に基づき決定される次のマイグレーション・データ・ブロックに進むステップS1114を繰り返すことを直接続行する。
【0194】
図10Aとは対照的に、
図10Bの方法は、例示的に、ステップS1103においてファイル全体でのクライアント・アクセスを差し控えるが、
図10AではステップS1103において実際にマイグレーションするデータ・マイグレーション・ブロックへのクライアント・アクセスを差し控えるのみであると想定し、そこでは他のブロックがシームレスにアクセス可能なままである。さらなる実施形態において、ステップS1103が、他のすべてのブロック(すでにマイグレーションされている、またまだマイグレーションされていない)へのクライアント・アクセスがシームレスに可能にされたままであるように現在のデータ・マイグレーション・ブロックへのクライアント・アクセス要求を一時的に差し控えるだけのためにステップS1114の後にデータ・ブロックに対してループで実行され得るという点において、
図10Bの方法におけるクライアント・アクセスをさらに改善することが可能である。次いで、ステップS1111は、その後マイグレーションされたデータ・マイグレーション・ブロックへのユーザ・クライアント・アクセスを再び可能にするためにステップS1112の後に実行され得る。
【0195】
図10Cは、
図10Aの方法と比較してマイグレーションおよび記憶効率を改善するファイルのデータのマイグレーションの流れ図の別の例を示している。
図10Cの方法は、上の
図10Aを参照しつつ説明されている方法に類似しているが、マイグレーション・データ・ブロックがゼロのビットのみを含むかどうかに関して特定のマイグレーション・データ・ブロックをチェックする追加のステップS1106を有する。マイグレーション・データ・ブロックがそのビットに少なくとも1つの1を含む(非ゼロ・ビット)場合に限り、この方法は、それぞれのマイグレーション・データ・ブロックをローカル・マイグレーション・パスに実際にコピーするステップS1107およびオブジェクト・ストア長を更新するステップS1112を続行する。
【0196】
そうでなければ、マイグレーション・データ・ブロックがゼロのビットのみを含む場合、この方法は、マイグレーション・データ・ブロックをマイグレーションするのを控え、またマイグレーション・データ・ブロックをストレージ・ユニット320に実際に書き込むのを控え、ステップS1107は省かれる。その代わりに、この方法は、例えば、ゼロのみを含む実際のデータを書き込むことなくローカル・オブジェクト・ストア長(マイグレーションの終わり領域のインジケータとしてのonode長)をデータ・ブロックのサイズだけインクリメントすることによって、オブジェクト・ストア長を直接更新することができる(ステップS1112)。これは、ストレージ・ユニット410内のデータのスパース率がストレージ・ユニット310内に反映されているときに、ストレージ・ユニット310内のスパース率の高いファイルのゼロのみを含むデータ部分を不効率に書き込むことが回避され得るという利点を有する。それぞれのブロックがゼロのビットのみを含むものとすることを示すために、ファイルまたはブロックのメタデータ内のフラグがセットされ、ブロックがゼロのみを含むことを示すことができる。
【0197】
好ましくは、ステップS1106は、第1のファイル・システム管理ユニット310の中央演算処理装置(CPU)によって実行されず、第1のファイル・システム管理ユニット310のFPGA(フィールド・プログラマブル・ゲート・アレイ)にオフロードすることなどによる他の手段によって実行される。他の実施形態では、例えば、参照により本明細書に組み込まれている米国特許第7,457,822B1号において説明されているようなハードウェア・ベースのファイル・システムでは、第1のファイル・システム管理ユニット310のハードウェア・ネットワーク・スタックは、例えばNFSなどのファイル・システム・プロトコルのリモート・プロシージャ・コール(RPC)を再アセンブルしながらステップS1106に対してデータ・ブロックを検査し、ソフトウェアに、非ゼロのデータを含むNFSヘッダの後の第1のオフセット、またはゼロが見つからないときには要求の終わりへのオフセットを受け渡すことができる。そのようなオフセットは、NFSなどのファイル・システム・プロトコルの応答のヘッダ内の第1の非ゼロ・ビットのインジケータであるものとしてよい。
【0198】
検査は、書き込みユーザ・データ(読み出し要求からのユーザ・データなど)でのバックグラウンド・マイグレーションの際に、ユーザ・データがNVRAMにログインされたとき、ゼロのみが書き込まれていることを検出した場合に書き込みが特定のエラーとともに失敗したときにも行われ得る。次いで、それぞれのファイルのオブジェクト・ストア長は、ゼロのみを含むデータを実際に書き込む代わりにゼロのみを有するユーザ・データコンテンツのサイズに応じてインクリメントされ得る(すなわち、書き込みを試みたが失敗したゼロの個数に対応する量だけオブジェクト・ストア長をインクリメントする)。
【0199】
いくつかの実施形態では、ステップS1106のチェックは、マイグレーション・データ・ブロックのデータをビット毎に分析することによって実行され得るが、好ましくは、そのような完全な分析は、ファイル・システム管理ユニット310の処理ユニット313の中央演算処理装置によって実行されない。効率を改善するために、バイト毎の分析チェックは、非ゼロ・ビットが検出されるとすぐに中断されるものとしてよく、また非ゼロ・ビットが検出されるとすぐに、ステップS1106は、マイグレーション・データ・ブロックの残り部分のビットをチェックすることなくNOを返し得る。
【0200】
また、マイグレーション・データ・ブロックのデータが、ビット毎に分析される場合、効率のさらなる改善のために、ステップS1106が、ブロックがゼロのビットのみを含む可能性が高いファイルのうちのいくつかについてのみ実行されることが望ましいことがある。例えば、この方法は、ステップS1106が特定のマイグレーション・データ・ブロックに対して実行されるものとするかどうかを決定するために特定のマイグレーション・データ・ブロックに関連付けられている特定のファイルの属性をチェックする別のステップを含み得る。
【0201】
いくつかの実施形態では、割り振られた記憶領域の記憶領域使用量のパーセンテージに関係するファイル属性が所定の閾値を下回ったとき(ファイルのデータコンテンツのスパース率が高いことを示す)、ステップS1106が実行され、割り振られた記憶領域の記憶領域使用量のパーセンテージが所定の閾値を超えたときに、ステップS1106は、実行されず、この方法は、ステップS1107を即座に続行する。これは、特定の基礎をなすファイルの割り振られた記憶領域の記憶領域使用量のパーセンテージが低いときに高いスパース率になるより高いリスクを有するマイグレーション・データ・ブロックに対してステップS1106が実行され、特定の基礎をなすファイルの割り振られた記憶領域の記憶領域使用量のパーセンテージが高いときに高いスパース率になるより低いリスクを有するマイグレーション・データ・ブロックに対してステップS1106が実行されないという利点を有する。
【0202】
記憶領域の使用量の特定のパーセンテージのファイルのデータのブロック内の高いスパース率のリスクは、ファイルの長さがより長いファイルに対してはより高いということに留意されたい。したがって、いくつかの実施形態では、割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの(リモート)長さとの比が所定の閾値を下回ったとき(ファイルのデータコンテンツのスパース率が高いことを示す)、ステップS1106が実行され、割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの(リモート)長さとの比が所定の閾値を超えたときに、ステップS1106は、実行されず、この方法は、ステップS1107を即座に続行する。これは、特定の基礎をなすファイルの割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの長さとの比が低いときに高いスパース率になるより高いリスクを有するマイグレーション・データ・ブロックに対してステップS1106が実行され、特定の基礎をなすファイルの割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの長さとの比が高いときに高いスパース率になるより低いリスクを有するマイグレーション・データ・ブロックに対してはステップS1106が実行されないという利点を有する。
【0203】
さらに、NFSベースの通信プロトコルなどのファイル・システム通信プロトコルでは、特定のファイルに対する読み出し応答が第1の非ゼロ・ビットの位置を示すメタデータを含み得るNFSベースの通信プロトコルの読み出し応答の読み出し応答構造を使用することが可能である。ユーザ・データを含む応答/メッセージのセクション内の第1の非ゼロ・バイトのオフセットを示すメタデータをNFS読み出し応答(または他の任意のプロトコル・メッセージ、すなわち、NFSに限定されない)に追加することが可能である。そのような機能は、第1のファイル・システム管理ユニット310のハードウェア・ユニットによって(例えば、そのハードウェア・ネットワーク・スタックによって)実行され得る。
【0204】
したがって、いくつかの実施形態では、特定のファイルのファイルコンテンツにおける第1の非ゼロ・ビットの位置を示すデータに基づきステップS1106を実行することによってマイグレーション・データ・ブロックのデータの面倒なバイト毎の分析を回避することが可能である。例えば、ステップS1106が、特定のファイルのファイル・データコンテンツの前部分または中間部分のデータを含むマイグレーション・データ・ブロックに対して実行され、特定のファイルのファイル・データコンテンツにおける第1の非ゼロ・ビットの位置は、ファイルの終わりに近い特定のファイルのファイル・データコンテンツの終了位置にあることが示される場合、それぞれのマイグレーション・データ・ブロックは、ゼロのビットのみを含むことが容易に、効率的に決定されるものとしてよく、ステップS1106は、YESを返す。
【0205】
図10Dは、ファイル・データ・マイグレーションの流れ図の別の例を示している。
図10Dは、上の
図10Bと同様のファイルについて1つの単一のマイグレーション・ジョブが作成される方法に対応し、これはステップS1114とS1107との間のファイルのデータ・マイグレーション・ブロックを連続的にマイグレーションするループ内の
図10Cに関連して上で説明されているような追加のステップS1106を有する。
【0206】
図10Eは、ファイル・データ・マイグレーションの流れ図の別の例を示している。
図10Eは、1つの単一のマイグレーション・ジョブが上の
図10Dと同様のファイルに対して作成される方法に対応している。しかしながら、
図10の方法は、ファイルのスパース率が決定される追加のステップS1115を含み、ステップS1116において、ステップS1115で決定されたファイルのスパース率が閾値を上回っているかどうかが決定される。
【0207】
いくつかの実施形態では、割り振られた記憶領域の記憶領域使用量のパーセンテージに関係するファイル属性が所定の閾値を下回ったとき(ファイルのデータコンテンツのスパース率が高いことを示す)、ステップS1116はYESを返すものとしてよく、割り振られた記憶領域の記憶領域使用量のパーセンテージが所定の閾値を超えたときに、ステップS1106はNOを返すものとしてよい。記憶領域の使用量の特定のパーセンテージのファイルのデータのブロック内の高いスパース率のリスクは、ファイルの長さがより長いファイルに対してはより高いということに留意されたい。したがって、いくつかの実施形態では、割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの(リモート)長さとの比が所定の閾値を下回ったとき(ファイルのデータコンテンツのスパース率が高いことを示す)、ステップS1116はYESを返すものとしてよく、割り振られた記憶領域の記憶領域使用量のパーセンテージとファイルの(リモート)長さとの比が所定の閾値を超えたときに、ステップS1116はNOを返すものとしてよい。
【0208】
ステップS1116がNOを返し、ファイルのスパース率が、特定の閾値より高くない場合、効率を高めるために、ステップS1106は実行されず、この方法は、データコンテンツをマイグレーションし、それをストレージ・ユニット320に書き込むステップS1107を直接続行する。ステップS1116がYESを返す場合、ステップS1106は、上の
図10Dと同様の特定のファイルのすべてのデータ・ブロックについて実行される。
【0209】
図10Cから10Eを参照する上記において、データ・マイグレーション・ブロックがゼロのビットのみを有する(すなわち、スパース・ブロック)かどうかを検出するために、または上記の特定のマイグレーション方法に関連してデータ・マイグレーション・ブロックがゼロのビットのみを有するかどうかをチェックするかどうかを決定するためデータ・マイグレーション・ブロックがゼロのビットのみを有する高い確率を有するかどうかを検出するための異なる有利なアプローチが説明されている。しかしながら、スパース・ブロックを検出する、およびデータ・ブロックがスパースである(すなわち、多数の連続するゼロ・ビットを有する、例えば、ゼロのみを有するブロック)確率をチェックする上で説明されているアプローチは、例えば、ユーザ・データの特定の領域がゼロのみ、もしくは少なくとも1つの非ゼロ・ビットを含むかどうかを検出/チェックする各ステップについて、ファイル・システム管理において1つまたは複数のデータ・ブロックを読み出すこと、書き込むこと、移動すること、送信すること、および/または分析することに関係する方法に対する上記のマイグレーション方法と無関係に適用され得ることに留意されたい。
【0210】
仮想化の際に(仮想化フェーズにおいて)、まだマイグレーションされていない仮想化されたファイル・システム・オブジェクト(マイグレーション・フェーズにおいて)について、第2のストレージ装置400によって処理されるファイル・システム(複数可)へのユーザ・アクセスは、第1のストレージ装置300を通じて間接的に可能にされ得る。仮想化されたオブジェクトへのユーザ・アクセスは、以下の
図11Aから11Hに関連して次に説明されているように可能にされ得る。
【0211】
特に、マイグレーション・フェーズにおいて、ユーザ・アクセスは、
図11Aから11Hに示されていように、まだマイグレーションを開始していないすべてのファイルについて(マイグレーション・ジョブがもう作成されたか作成されていないかに関係なく)、また新規ディレクトリおよび新規ファイルの作成が第1のファイル管理ユニット310のみによって管理されるファイル・システム上で実行され得る(第2のファイル管理ユニット410によって管理されるファイル・システム上では実行され得ない)ことを除き、まだマイグレーションされていないファイルを依然として含むすべてのディレクトリについて処理され得る。
【0212】
特定のファイルのデータが、特定のファイルに関連付けられているすべてのマイグレーション・データ・ブロックが第1のストレージ装置300にマイグレーションされ、対応する外部リンク・オブジェクトが取り除かれているという点において完全にマイグレーションされた後、ファイルは、第1のファイル・システム管理ユニット310のファイル・システムのレギュラー・ファイルとなり、したがって、ファイルは、ファイル・システム管理ユニット310のファイル・システム上のローカルでのみ処理され得ることに留意されたい。第2のファイル・システム管理ユニット410のファイル・システム内の対応するファイルは、したがって、ファイルへのユーザ・アクセスにより第1のファイル・システム管理ユニット310のファイル・システム内のファイルと異なり始め得る。
【0213】
図11Aは、マイグレーションがまだ開始されていない仮想化されたファイルへの書き込みアクセスに対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する書き込み要求が受信されたときに、書き込み要求は、ターゲット・ファイルに対する対応する書き込み要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによって対応する外部リンク・オブジェクト(例えば、
図5のXLO8)を介してパススルーされる。
【0214】
第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410から書き込み確認応答を受信した後に、対応する外部リンク・オブジェクトのメタデータが更新され(例えば、ファイルの長さ、タイム・スタンプ、または書き込み操作によって変更される他のファイル属性を更新することによって)、次いで、クライアント100に対して書き込み確認応答がなされる。
【0215】
図11Bは、マイグレーションがまだ開始されていない仮想化されたファイルへの読み出しアクセスに対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する読み出し要求が受信されたときに、読み出し要求は、ターゲット・ファイルに対する対応する読み出し要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによって対応する外部リンク・オブジェクト(例えば、
図5のXLO8)を介してパススルーされる。
【0216】
第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410から読み出し応答(読み出しデータを含む)を受信した後に、読み出し要求に応答して受信された読み出しデータがクライアント100に転送される。
【0217】
図11Cは、マイグレーションがまだ開始されていない仮想化されたファイル、またはディレクトリへの属性アクセスに対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。同じ手順が、マイグレーションが進行中であるが、上のステップS1109はまだ実行されていない仮想化されたファイルへの属性アクセスについても適用され得ることに留意されたい。
【0218】
第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する属性読み出し要求が受信されたときに、対応する属性は、対応する外部リンク・オブジェクト(例えば、
図5のXLO8)からローカルで読み出され、要求された属性は、第2のファイル・システム管理ユニット410との通信から遅延なくクライアントの属性読み出し要求に応答してクライアント100に効率的に、都合よく返される。
【0219】
ディレクトリについては、属性読み出し要求は、ディレクトリ・メタデータから対応する属性を読み出すことによって第1のファイル・システム管理ユニット310においてローカルで同様に処理され、読み出された属性は、第2のファイル・システム管理ユニット410との通信から遅延なくクライアントの属性読み出し要求に応答してクライアント100に効率的に、都合よく返される。
【0220】
ディレクトリのリンク・カウントに関する問い合わせがある場合、第1のファイル・システム管理ユニット310は、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システム上の対応するディレクトリの実際のリンク・カウントを返さず、上で説明されているように実リンク・カウントとフェイク・リンク・カウントとの総和を返すことによって第2のファイル・システム管理ユニット410によって管理されるようなファイル・システム上の対応するディレクトリの実際のリンク・カウントを返す。
【0221】
図11Dは、マイグレーションがまだ開始されていない仮想化されたファイルを削除することに対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する削除要求が受信されたときに、削除要求は、ターゲット・ファイルに対する対応する削除要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによって対応する外部リンク・オブジェクト(例えば、
図5のXLO8)を介してパススルーされる。
【0222】
第2のファイル・システム管理ユニット410によりターゲット・ファイル(例えば、file8)を削除し、第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410から削除確認応答を受信した後に、対応する外部リンク・オブジェクト(例えば、XLO8)が削除され、仮想化管理情報テーブル341内の対応するエントリは、削除されたファイルに対するマイグレーション・ジョブの作成を回避するために取り除かれ、次いで、クライアント100に対して、ターゲット・ファイルの削除の確認応答がなされる。
【0223】
ユーザが、完全にはまだマイグレーションされていないが、1つまたは複数のマイグレーション・データ・ブロックがもうマイグレーションされているようにマイグレーションをすでに開始しているファイルを削除することを試みる場合、削除は、上で説明されているように実行され得るが、ストレージ・ユニット310内に存在するすでにマイグレーションされているマイグレーション・データ・ブロックのデータも削除され得る。
【0224】
図11Eは、仮想化のみにおけるファイル作成に対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。
【0225】
ターゲット・パス・ロケーション内に新規ファイルを作成するために、第1のファイル・システム管理ユニット310においてファイル作成要求が受信されたときに、対応する新規外部リンク・オブジェクトが、ターゲット・パス・ロケーションに対応するローカル・パス内に作成され、ファイル作成要求は、ターゲット・パス・ロケーション内のターゲット・ファイルに対する対応するファイル作成要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによってパススルーされる。
【0226】
ターゲット・パス・ロケーションに対応するリモート・パス内に新規ファイルを作成し、第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410からファイル作成確認応答を受信した後に(および潜在的に、対応する外部リンク・オブジェクトのメタデータを更新した後に)クライアント100に対して、ターゲット・ファイルのファイル作成の確認応答がなされる。
【0227】
マイグレーション中のファイル作成要求は、上で説明されているのと同様にして処理され得るが、マイグレーションの負担を軽減するために、マイグレーション・フェーズに対しては(すなわち、マイグレーションが、仮想化がまだ進行中であるか、またはすでに終了しているかに関係なく開始されている場合)、ファイル作成要求が異なる仕方で処理されること、およびファイルが第1のファイル・システム管理ユニット310によって管理されるファイル・システムにおいてのみファイル作成要求に応答して作成されるが、第2のファイル・システム管理ユニット410によって管理されるファイル・システムにパススルーされないことが好ましい。
【0228】
図11Fは、属性を変更する(まだ完全にはマイグレーションされていないファイルに対する、仮想化時およびマイグレーション時に)場合のクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する属性変更要求が受信されたときに、属性変更要求は、ターゲット・ファイル(例えば、file8)に対する対応する属性変更要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによって対応する外部リンク・オブジェクト(例えば、XLO8)を介してパススルーされ、次いで、属性変更要求は、第1のファイル・システム管理ユニット310において、対応する外部リンク・オブジェクト(例えば、
図5のXLO8)における属性が、属性変更要求に従って変更されるという点において実行される。第1のファイル・システムにおいて属性変更要求を適用するときに、属性変更が、file−lengthからnew−file−lengthへの設定された長さである場合、オブジェクト・ストア長は、オブジェクト・ストア長がnew−file−lengthよりも大きい場合にのみ更新される。
【0229】
第2のファイル・システム管理ユニット410によりターゲット・ファイルの属性を変更し、第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410から属性変更確認応答を受信した後に、クライアント100に対して、属性変更の確認応答がなされる。同様に、第1のファイル・システム管理ユニット301においてターゲット・ディレクトリに対する属性変更要求を受信したときに、仮想化されたディレクトリのディレクトリ・メタデータが、要求に従って属性を変更するように更新され、次いで、属性変更要求は、第2のファイル・システム管理ユニット410に転送される。
【0230】
図11Gは、仮想化のみにおけるディレクトリ作成に対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。ターゲット・パス・ロケーション内に新規の空のディレクトリを作成するために、第1のファイル・システム管理ユニット310においてディレクトリ作成要求が受信されたときに、対応する新規の空のディレクトリおよびそのディレクトリ・メタデータが、ターゲット・パス・ロケーションに対応するローカル・パス内に作成され、新規ディレクトリは、COMPLETEであるものとして示され、ディレクトリ作成要求は、ターゲット・パス・ロケーション内のターゲット・ディレクトリに対する対応するディレクトリ作成要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによってパススルーされる。
【0231】
ターゲット・パス・ロケーションに対応する第2のファイル・システム管理ユニット410によって管理されるファイル・システムのリモート・パス内に新規の空のディレクトリを作成し、第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410からディレクトリ作成確認応答を受信した後に(および潜在的に、対応するディレクトリ・メタデータのメタデータを更新した後に)クライアント100に対して、ターゲット・ディレクトリのディレクトリ作成の確認応答がなされる。
【0232】
マイグレーション中のディレクトリ作成要求は、上で説明されているのと同様にして処理され得るが、マイグレーションの負担を軽減するために、マイグレーション・フェーズに対しては(すなわち、マイグレーションが、仮想化がまだ進行中であるか、またはすでに終了しているかに関係なく開始されている場合)、ディレクトリ作成要求が異なる仕方で処理されること、およびディレクトリが第1のファイル・システム管理ユニット310によって管理されるファイル・システムにおいてのみディレクトリ作成要求に応答して作成されるが、第2のファイル・システム管理ユニット410によって管理されるファイル・システムにパススルーされないことが好ましい。
【0233】
図11Hは、ディレクトリ名前変更に対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。既存のディレクトリの名前を変更するために、第1のファイル・システム管理ユニット310においてディレクトリ名前変更要求(ディレクトリの名前および/またはパス・ロケーションを変更する)が受信されたときに、対応するディレクトリは、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システム内でディレクトリ名前変更要求に従って名前を変更され、ディレクトリ名前変更要求は、ターゲット・ディレクトリに対する対応するディレクトリ名前変更要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによってパススルーされる。
【0234】
第2のファイル・システム管理ユニット410によって管理されるようなファイル・システム内でディレクトリ名前変更要求に従ってターゲット・ディレクトリの名前を変更した後、また第2のファイル・システム管理ユニット410から第1のファイル・システム管理ユニット310において名前変更確認応答を受信した後に、クライアント100に対して、ターゲット・ディレクトリのディレクトリ名前変更の確認応答がなされる。
【0235】
上の説明は、仮想化フェーズにおいて、またマイグレーションがまだ始まっていないファイル・システム・オブジェクトに対するマイグレーション・フェーズにおいて仮想化されたファイル・システムにおけるファイル・システム・オブジェクトへのユーザ・アクセスに関係するが、次の説明は、各々特定のファイルのファイルコンテンツに関連付けられているマイグレーション・データ・ブロックのグループのマイグレーション・データ・ブロックに向けられている、現在マイグレーション中のファイルを含む、すなわち、複数のマイグレーション・ジョブが存在するファイルを含む、ファイルへのユーザ・アクセスを可能にするより一般的な例に関係する。
図10Aから10Eに関連して上で説明されているように、現在マイグレーションされているファイルまたはデータ・マイグレーション・ブロックのデータへのユーザ・アクセスは一時的に差し控えられるが、すでにマイグレーションされた、またはまだマイグレーションを開始していない、他のすべてのファイルまたはマイグレーション・データ・ブロックは、依然としてユーザ・アクセス可能であり得る。このことは、すべてのクライアント・アクセスの試みが、それでも、最終的には処理(サービス)され、クライアント側に対する顕著な影響は、待ち時間が加わることのみであることを意味する。
【0236】
図12Aは、マイグレーションが開始されており、進行中であるファイルへのマイグレーション・フェーズにおけるクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する書き込み要求が受信されたときに、ファイルのマイグレーションが開始し、進行中である間に、書き込み要求は、ターゲット・ファイルに対する対応する書き込み要求を第1のファイル・システム管理ユニット310から第2のファイル・システム管理ユニット410に発行することによって対応する外部リンク・オブジェクト(例えば、
図5のXLO8)を介してパススルーされる。第1のファイル・システム管理ユニット310において第2のファイル・システム管理ユニット410から書き込み確認応答を受信した後に、書き込み要求が、それに加えて、第1のファイル・システム内のターゲット・ファイルのマイグレーションされた部分にも実行されるものとしてよく、対応する外部リンク・オブジェクトのメタデータが更新され(例えば、ファイルの長さ、タイム・スタンプ、または書き込み操作によって変更される他のファイル属性を更新することによって)、次いで、クライアント100に対して書き込み確認応答がなされる。ファイルの領域が、すでにマイグレーションされているが、書き込みアクセスのターゲットである領域のすべてがまだマイグレーションされていない場合、書き込みアクセスは、いくつかの実施形態では
図12Aに従って、または他の実施形態では
図11Aに従って処理され得る。
【0237】
図12Bは、マイグレーションが完了している進行中であるファイルへのマイグレーション・フェーズにおけるクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している(すなわち、ターゲット・ファイルのすべてのターゲット・ブロックがすでにマイグレーションされており、その実際のユーザ・データがストレージ・ユニット320に記憶されている第1のファイル・システム内に存在するとき)。書き込み要求が、第1のファイル・システム管理ユニット310においてターゲット・ファイルに対して受信され、ファイルのマイグレーションが完了しているときに、書き込み要求は、第1のファイル・システム内でのみ実行される。対応するファイルのメタデータが更新され(例えば、ファイルの長さ、タイム・スタンプ、または書き込み操作によって変更される他のファイル属性を更新することによって)、次いで、クライアント100に対して書き込み確認応答がなされる。
【0238】
上の
図12Aおよび12Bの実施形態では、マイグレーション・フェーズにおいて、ターゲット・ファイルへの書き込み要求は、ファイルがまだ部分的にしかマイグレーションされていないか、もしくはまだマイグレーションを開始していない(
図12A)場合に両方のファイル・システムに適用されるか、または書き込み要求は、ターゲット・ファイルがすでに完全にマイグレーションされた後に第1のファイル・システムにのみ適用される。ターゲット・ファイルが完全にマイグレーションされるまでターゲット・ファイルに対する書き込み要求を第2のファイル・システム管理ユニット410にパススルーすることで、ターゲット・ファイルが完全にマイグレーションされるまでターゲット・ファイルのカノニカル・バージョンを第2のファイル・システム内に保つ、すなわち、ファイルは、第2のファイル・システム内に参照用として保たれる。これは、ファイルが、完全にはマイグレーションされていない限り第2のファイル・システムのバックアップから完全に復元され得るので障害処理を簡素化するという利点を有する。
【0239】
図13Aおよび13Bを参照しつつ以下でさらに説明されているような他の実施形態では、部分的にマイグレーションされたターゲット・ファイルに対して、書き込み要求のターゲット・ブロックがすでにマイグレーションされている場合に、書き込み要求は第1のファイル・システムでのみ実行され、書き込み要求のターゲット・ブロックがまだマイグレーションされていない場合、書き込み要求は、第2のファイル・システムでのみ実行され得る。そのような実施形態では、第1のファイル・システムも第2のファイル・システムも、ターゲット・ファイル全体のカノニカル・バージョンを有し得ないが、第1のファイル・システムは、オブジェクト・ストア長の前にブロックに対するカノニカル・データを有し、オブジェクト・ストア長の後にブロックに対するカノニカル・データを有する。そのような実施形態は、マイグレーションの際にユーザ書き込みアクセスを処理する効率を最適化するのに役立ち得るが、オブジェクト・ストア長の前のブロックが第1のファイル・システムのパックアップ・コピーから復元され、オブジェクト・ストア長の後のブロックが第2のファイル・システムのパックアップ・コピーから復元されるという点においてそのような条件はデータ復旧の場合に考慮される必要がある。
【0240】
図12Cは、マイグレーション・フェーズにおけるマイグレーションされた(または部分的に)ファイルへの読み出しアクセスのための情報交換を示している。
図12Cは、マイグレーションの際のマイグレーションされた(または部分的に)ファイルへの読み出しアクセスに対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。第1のファイル・システム管理ユニット310においてターゲット・ファイル(例えば、
図4のfile8)に対する属性読み出し要求が受信され、ファイルのマイグレーションがすでに完了しているときに、読み出し要求は、ストレージ・ユニット320に記憶されているデータに基づき第1のファイル・システム管理ユニット310によってローカルで実行され、読み出しデータは、第2のファイル・システム管理ユニット410との通信を行うことなく、読み出し要求に応答してクライアント100に転送される。また、ファイルが、複数のデータ・マイグレーション・ブロックがすでにマイグレーションされているという点において部分的にのみマイグレーションパスされているが、1つまたは複数のデータ・マイグレーション・ブロックは依然としてマイグレーションされる必要があり、読み出し要求では、すでにマイグレーションされたブロックのユーザ・データのみを扱う場合、読み出し要求は、好ましくは、
図12Cで説明されているように第1のファイル・システム管理ユニット310によってローカルで処理される。その一方で、読み出し要求が全体としてまたは部分的に依然としてマイグレーションされる必要があるデータ・マイグレーション・ブロックのユーザ・データを扱う場合、読み出し要求は、好ましくは、
図11Bで説明されていいように処理される。
【0241】
図12Dは、マイグレーション・フェーズにおけるファイル作成に対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。ターゲット・パス・ロケーション内に新規ファイルを作成するために、第1のファイル・システム管理ユニット310においてファイル作成要求が受信されたときに、マイグレーションの負担を軽減するために、対応するファイルは、ファイル作成要求を第2のファイル・システム管理ユニット410に受け渡すことなく、第1のファイル・システム管理ユニット310によって第1のファイル・システム内のローカルでのみターゲット・パス・ロケーションに対応するローカル・パス内に作成される。ターゲット・パス・ロケーションに対応するローカル・パス内に新規ファイルを作成した後、クライアント100に対してターゲット・ファイルのファイル作成の確認応答がなされる。
【0242】
このことは、新規ファイルが第2のファイル・システム内にも反映されることなく第1のファイル・システム内にのみ作成されるのでファイル・システムがマイグレーション・フェーズにおいて異なり始めることを意味する。
【0243】
図12Eは、マイグレーション・フェーズにおけるディレクトリ作成に対するクライアント100と、第1のファイル・システム管理ユニット310と、第2のファイル・システム管理ユニット410との間の情報交換の図を例示している。ターゲット・パス・ロケーション内に新規の空のディレクトリを作成するために、第1のファイル・システム管理ユニット310においてディレクトリ作成要求が受信されたときに、対応する空のディレクトリが、ファイル作成要求を第2のファイル・システム管理ユニット410に受け渡すことなく、第1のファイル・システム管理ユニット310によって第1のファイル・システム内のローカルでのみターゲット・パス・ロケーションに対応するローカル・パス内に作成される。ターゲット・パス・ロケーションに対応するローカル・パス内に新規の空のディレクトリを作成した後、クライアント100に対してディレクトリ作成の確認応答がなされる。
【0244】
このことは、新規ディレクトリが第2のファイル・システム内にも反映されることなく第1のファイル・システム内にのみ作成されるのでファイル・システムがマイグレーション・フェーズにおいて異なり始めることを意味する。新規ファイルを第1のファイル・システムにのみ作成することは、オーバーヘッド処理が回避され得る、すなわち、ファイルのデータへのアクセスを第2のファイル・システムに伝えることによって引き起こされるオーバーヘッド、ファイルのマイグレーション、および第1のファイル・システムのハードウェア・アクセラレーションからの恩恵を受けないことが、回避され得るという利点を有する。
【0245】
図13Aは、マイグレーションの際の書き込みアクセス管理の流れ図の例を示している。ステップS1201において、特定のターゲット・ファイルに書き込むためのユーザ書き込み要求が受信され、ステップS1202において、特定のターゲット・ファイルがもうマイグレーションされたか、マイグレーションされていないかがチェックされ、ステップS1202がYESを返した場合、ステップS1206において第1のファイル・システム管理ユニット310のファイル・システム上で書き込み要求が実行される。ステップS1202では、オブジェクト・ステータス「migrated」を有するターゲット・ファイルに対してYESを返す。そうでなければ、ステップS1202がNOを返した場合、ステップS1204においてマイグレーション・データ・ブロックがターゲット・ファイルに対してもうマイグレーションされたかどうかがチェックされる。ステップS1204は、オブジェクト・ステータス「needs migration」を有するターゲット・ファイルに対して、またはオブジェクト・ステータス「migrating」を有するターゲット・ファイルに対してNOを返すが、すべての関連付けられているマイグレーション・ジョブは依然としてジョブ・キュー346C内に保持されている。
【0246】
ステップS1204がNOを返した場合、書き込み要求は、ステップS1207においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Aに従って)。そうでなければ、ステップS1204がYESを返した場合、すなわち、1つまたは複数のデータ・マイグレーション・ジョブがすでに実行されており、1つまたは複数のマイグレーション・データ・ブロックがすでにマイグレーションされているときに、ステップS1205において、書き込み要求に従ってデータ書き込みの影響を受ける、1つまたは複数のターゲット・ブロックのうちの少なくとも1つのデータ・マイグレーション・ブロックが、もうマイグレーションされているかどうかがチェックされる。
【0247】
ステップS1205がNOを返した場合(すなわち、書き込みは、まだマイグレーションされていないデータ・ブロックに影響を及ぼすのみである)、書き込み要求は、ステップS1206においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Aに従って)。そうでなければ、ステップS1205がYESを返した場合(すなわち、書き込みは、すでにマイグレーションされている少なくとも1つのデータ・ブロックにも影響を及ぼす)、ステップS1206において第1のファイル・システム管理ユニット310のファイル・システム上で書き込み要求が実行されるが、これは、破線矢印を介するなどしてステップS1207においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で追加としてさらに実行され得る(以下の書き込みアクセス実行に対するより具体的な例を参照されたい)。
【0248】
ステップS1207およびS1206が両方とも実行される、実施形態において、ステップS1205がYESを返し(すなわち、書き込みは、すでにマイグレーションされている少なくとも1つのデータ・ブロックにも影響を及ぼす)、例えば、特に、書き込みが、すでにマイグレーションされているデータ・ブロックのみにも影響を及ぼすときであっても、第2のファイル・システムは、ファイルが完全にマイグレーションされるまでそれぞれのファイルのカノニカル・データを有したままであり、ファイルが完全にマイグレーションされる前に障害が発生した場合、ファイルは、第2のファイル・システムにおいてカノニカル・バージョンから完全に再マイグレーションされ(再びマイグレーションされ)得る(または切り捨てられて完全にマイグレーションされることすらあり得る)。
【0249】
図13Bは、オンデマンド・マイグレーション開始を含むマイグレーションの際の書き込みアクセス管理の流れ図の別の例を示す図である。書き込み要求は、上の
図13Aによる方法と同様に処理されるが、ステップS1202とS1204との間にステップS1203が1つ追加され、ターゲット・ファイルがすでにマイグレーションしているかどうか、すなわち、ターゲット・ファイルのオブジェクト・ステータスが「migrating」であるかどうかがチェックされる。ステップS1203がYESを返した場合、この方法は、上の
図13Aの方法と同様に続行する。
【0250】
しかしながら、ステップS1203がNOを返した場合、ターゲット・ファイルのオンデマンド・マイグレーションは、書き込み要求によってトリガーされ、この方法は、ターゲット・ファイルのマイグレーション・データ・ブロックを決定するステップS1208、各決定されたマイグレーション・データ・ブロックに対するマイグレーション・ジョブ(または上で説明されている実施形態のようなファイルに対するただ1つのマイグレーション・ジョブ)を作成するステップS1209、および
図9Aについて上で説明されているステップS1005、S1006、およびS1007と同様にターゲット・ファイルのオブジェクト・ステータスを「migrating」に更新するステップS1210を続行する。次いで、書き込み要求は、ステップS1207においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Aに従って)。
【0251】
図14Aは、マイグレーションの際の読み出しアクセス管理の流れ図の例を示している。ステップS1301において、特定のターゲット・ファイルを読み出すためのユーザ読み出し要求が受信され、ステップS1302において、特定のターゲット・ファイルがもうマイグレーションされたか、マイグレーションされていないかがチェックされ、ステップS1302がYESを返した場合、ステップS1306において第1のファイル・システム管理ユニット310のファイル・システム上で読み出し要求が実行される。ステップS1302では、オブジェクト・ステータス「migrated」を有するターゲット・ファイルに対してYESを返す。そうでなければ、ステップS1302がNOを返した場合、ステップS1304においてマイグレーション・データ・ブロックがターゲット・ファイルに対してもうマイグレーションされたかどうかがチェックされる。ステップS1304は、オブジェクト・ステータス「needs migration」を有するターゲット・ファイルに対して、またはオブジェクト・ステータス「migrating」を有するターゲット・ファイルに対してNOを返すが、すべての関連付けられているマイグレーション・ジョブは依然としてジョブ・キュー346C内に保持されている。
【0252】
ステップS1304がNOを返した場合、読み出し要求は、ステップS1307においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Bに従って)。そうでなければ、ステップS1304がYESを返した場合、すなわち、1つまたは複数のデータ・マイグレーション・ジョブがすでに実行されており、1つまたは複数のマイグレーション・データ・ブロックがすでにマイグレーションされているときに、ステップS1305において、読み出し要求に従ってデータ読み出しのターゲットである、1つまたは複数のターゲット・ブロックが、もうマイグレーションされているかどうかがチェックされる。
【0253】
ステップS1305がNOを返した場合(すなわち、読み出しは、まだマイグレーションされていない少なくとも1つのターゲット・データ・ブロックである)、読み出し要求は、ステップS1306においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Bに従って)。そうでなければ、ステップS1305がYESを返した場合(すなわち、読み出しは、すでにマイグレーションされているデータ・ブロックのみをターゲットとする)、ステップS1306において第1のファイル・システム管理ユニット310のファイル・システム上で読み出し要求が実行される。
【0254】
図14Bは、オンデマンド・マイグレーション開始を含むマイグレーションの際の読み出しアクセス管理の流れ図の別の例を示している。読み出し要求は、上の
図14Aによる方法と同様に処理されるが、ステップS1302とS1304との間にステップS1303が1つ追加され、ターゲット・ファイルがすでにマイグレーションしているかどうか、すなわち、ターゲット・ファイルのオブジェクト・ステータスが「migrating」であるかどうかがチェックされる。ステップS1303がYESを返した場合、この方法は、上の
図14Aの方法と同様に続行する。
【0255】
しかしながら、ステップS1303がNOを返した場合、ターゲット・ファイルのオンデマンド・マイグレーションは、読み出し要求によってトリガーされ、この方法は、ターゲット・ファイルのマイグレーション・データ・ブロックを決定するステップS1308、各決定されたマイグレーション・データ・ブロックに対するマイグレーション・ジョブを作成するステップS1309、および
図9Aについて上で説明されているステップS1005、S1006、およびS1007と同様にターゲット・ファイルのオブジェクト・ステータスを「migrating」に更新するステップS1310を続行する。次いで、読み出し要求は、ステップS1307においてターゲット・ファイルに関連付けられている対応する外部リンク・オブジェクトを通じて第2のファイル・システム管理ユニット410のファイル・システム上で実行される(例えば、上の
図11Bに従って)。
【0256】
いくつかの実施形態では、第2のストレージ装置400のファイル・システムからの、削除されたファイル(またはディレクトリ)の偶発的復活を回避することがさらに望ましい。例えば、ファイルまたはディレクトリが第1のストレージ装置400におけるファイル・システム内でユーザによって削除されたが、第2のストレージ装置400のファイル・システムに残っているときに、それぞれのファイルまたはディレクトリが、ユーザによって削除されたけれども第2のストレージ装置400から仮想化およびその後のマイグレーションによって偶発的に復活させられる可能性がある。したがって、以前に削除されているファイルまたはディレクトリのそのような偶発的復活を回避するために、ファイル削除要求およびディレクトリ削除要求は、仮想化、マイグレーションの最中に、またファイルおよびディレクトリのマイグレーション後も、第2のストレージ装置400にパススルーされ得る。
【0257】
いくつかの実施形態では、第2のストレージ装置400のファイル・システムからの、名前変更されたファイル(またはディレクトリ)の偶発的復活を回避することがさらに望ましい。例えば、ファイルまたはディレクトリが第1のストレージ装置400におけるファイル・システム内でユーザによって名前変更されたが、第2のストレージ装置400のファイル・システムでは変更されずに残っているときに、それぞれの名前変更されたファイルまたはディレクトリが、ユーザによって名前変更されたけれども第2のストレージ装置400から仮想化およびその後のマイグレーションによって偶発的に復活させられる可能性がある。したがって、以前に名前変更されたファイルまたはディレクトリのそのような偶発的復活を回避するために、名前変更要求は、2つのハード・リンクされたオブジェクトのうちの1つのみで名前変更を実行する前にファイルまたはディレクトリへのハード・リンクを作成することで第1のファイル・システム管理ユニット310のファイル・システムにおいて実行され得る。
【0258】
いくつかの実施形態では、第2のストレージ装置400のファイル・システムからの、以前に切り捨てられたファイルの終わり部分の偶発的復活を回避することがさらに望ましい。例えば、ファイルが第1のストレージ装置400におけるファイル・システム内でユーザによって切り捨てられたが、第2のストレージ装置400のファイル・システムでは変更されずに残っているときに、ファイルのそれぞれの切り捨てられた終わり部分が、ユーザによって切り捨てられたけれども第2のストレージ装置400から仮想化およびその後のマイグレーションによって偶発的に復活させられる可能性がある。したがって、以前に切り捨てられたファイルの終わり部分のそのような偶発的復活を回避するために、ファイル切り捨て要求は、仮想化、マイグレーションの最中に、またファイルのマイグレーション後も、第2のストレージ装置400にパススルーされ得る。
【0259】
図15Aおよび15Bは、マイグレーション中、およびマイグレーション後のファイルのファイルコンテンツの例示的な概略図を示している。
図15Aにおいて、ファイルF1_Iのファイルコンテンツは、左側に第1のファイル・システム管理ユニット310によって管理されるファイル・システム内に存在する通りに例示されており、対応するファイルF1_Xのファイルコンテンツは、右側に第2のファイル・システム管理ユニット410によって管理されるファイル・システム内に存在する通りに例示されている。
【0260】
対応するファイルは、上で説明されているように第2のストレージ装置400から第1のストレージ装置300に現在マイグレーションされている。ファイルコンテンツF1_Xは、8個のマイグレーション・データ・ブロックB1からB8に分割され、マイグレーション・データ・ブロックB1からB8のコンテンツは、左側でファイルF1_Iに連続的にマイグレーションされる。ハッチング(ユーザ・データが記憶されているブロックを示す斜線の入っているブロック)によって例示されているように、4個のマイグレーション・データ・ブロックB1からB4は、すでにマイグレーションされており、第1のファイル管理ユニット310によって管理されるようなファイル・システム内に存在し、実際にはストレージ・ユニット310上に記憶されるが、ブロックB5からB8は、まだマイグレーションされる必要がある。
【0261】
したがって、ファイルF1_Iのオブジェクト・ストア長OBJは、ファイルF1_Iのファイルコンテンツの中のマイグレーションの終わり位置EOMを示す。その一方で、ファイルF1_Xの対応するファイルコンテンツにおいて、ファイルの終わり位置EOFが、ファイルの(リモート)長さLOFによって示される。左側のファイルの(ローカル)長さは、オブジェクト・ストア長OBJに等しいか(例えば、ブロックB5からB8に対して割り振られている記憶領域がまだない場合)、またはファイルの(リモート)長さLOFに等しい可能性がある(例えば、ブロックB5からB8に対して記憶領域がすでに割り振られている場合)。
【0262】
図15Bにおいて、ファイルのファイルF1_IおよびF1_Xのファイルコンテンツは、コンテンツが完全にマイグレーションされた後のものとして例示されており、ファイルのデータコンテンツのすべてがストレージ・ユニット310上にも存在する。したがって、すべてのマイグレーション・データ・ブロックB1からB8のデータは、マイグレーションされ、ストレージ・ユニット310に記憶されている。その結果、ファイルF1_Xのファイルの(リモート)長LOFは、ファイルF1_Iのオブジェクト・ストア長OBJに等しく、ファイルF1_Xのファイルの終わりEOFは、ファイルF1_Iのマイグレーションの終わり位置EOMに等しい。これは、ファイルが完全にマイグレーションされていることを効率的に検出するために使用され得る(上記のステップS1108を参照)。
【0263】
図16Aおよび16Bは、マイグレーション中、およびマイグレーション後のファイルのファイルコンテンツに対する例示的なデータ書き込み手順の概略を示している。
図16Aおよび16Bにおけるマイグレーションの状況は、ファイルF1_IおよびF1_Xに対する上記の
図15Aにおけるマイグレーションの状況に類似しており、マイグレーション・データ・ブロックB1からB4がすでにマイグレーションされている時間に、F1_IおよびF1_Xのファイルコンテンツに関連付けられているファイルにデータ書き込みブロックDWBを書き込むデータ書き込み要求が受信されると想定される。
【0264】
図16Aにおいて、データ書き込みブロックDWBのオフセットOFFは、ファイルF1_Iの現在のオブジェクト・ストア長OBJよりも小さく、したがって、データ書き込みは、すでにマイグレーションされているターゲット・ブロックB4に影響を及ぼすことが検出され得る。次いで、ステップS1205およびS1206に従って、データ書き込みブロックDWBによるデータ書き込みは、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システムにおいてファイルF1_Iのファイルコンテンツに実行され、好ましくは、第2のファイル・システム管理ユニット410によって管理されるようなファイル・システムにおけるファイルF1_Xのファイルコンテンツでも実行されるか、または、そうでなければ、マイグレーション・データ・ブロックB6およびマイグレーション・データ・ブロックB7の、オフセット位置OFFまでの部分のマイグレーションはその後スキップされる。
【0265】
図16Bにおいて、データ書き込みブロックDWBのオフセットOFFは、ファイルF1_Iの現在のオブジェクト・ストア長OBJよりも大きく、したがって、データ書き込みは、すでにマイグレーションされているマイグレーション・データ・ブロックに影響を及ぼさない。次いで、ステップS1205およびS1207に従って、データ書き込みブロックDWBによるデータ書き込みは、第2のファイル・システム管理ユニット410によって管理されるようなファイル・システムにおいてファイルF1_Xのファイルコンテンツに実行される。また、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システムにおけるファイルF1_Iのファイルコンテンツでも実行され得る。
【0266】
図17Aおよび17Bは、マイグレーション中、およびマイグレーション後のファイルのファイルコンテンツに対する例示的なデータ・マイグレーション手順の概略を示している。
図16Aおよび16Bにおけるマイグレーションの状況は、ファイルF1_IおよびF1_Xに対する上記の
図15Aにおけるマイグレーションの状況に類似しており、マイグレーション・データ・ブロックB1からB4がすでにマイグレーションされている時間に、F1_IおよびF1_Xのファイルコンテンツに関連付けられているファイルにデータ書き込みブロックDWBを書き込むデータ書き込み要求が受信されると想定される。データ書き込みは、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システムにおけるファイルF1_Iのファイルコンテンツで実行されており、マイグレーションの終わり位置は、マイグレーション・ブロックB6内の位置にシフトされている。
【0267】
マイグレーションを目的として、マイグレーション・データ・ブロックB6は、マイグレーション・データ・ブロックB6に対するマイグレーション・ジョブが
図17Aに示されているようにマイグレーション・ユニット345によって実行されると、その後全体としてマイグレーションされ得るが、マイグレーション・データ・ブロックB6は、第1のファイル・システム管理ユニット310によって管理されるようなファイル・システムにおけるファイルF1_Iのファイルコンテンツに全体として書き込まれ得る。代替的に、マイグレーション・ユニット345は、データ書き込みの実行の後にファイルF1_Iのファイルコンテンツの現在のオブジェクト長をチェックし、切り取られ、データ書き込みの実行後にファイルF1_Iのファイルコンテンツのオブジェクト・ストア長に対応するデータ書き込みの終わり位置の位置からマイグレーション・データ・ブロックB6の終わり位置まで延在する調整済みのより小さいマイグレーション・データ・ブロックB6’をマイグレーションすることができる。
【0268】
図18は、マイグレーションの際のファイルのファイルコンテンツの例示的な概略図を示している。例示的に、ユーザ書き込み要求は、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内の位置W1においてオブジェクト・ストア長OBJ1よりも大きい位置W2に対応するオフセットを有するデータ書き込みブロックDWBに関連して受信され(すなわち、マイグレーション・データ・ブロックB1からB4はすでにマイグレーションされている)、この場合第1のファイル・システム管理ユニット310によって管理されるファイル・システム内のファイルのファイルコンテンツに書き込まれる場合に
図18においてオブジェクト・ストア長をOBJ2にシフトすることになる。
【0269】
いくつかの実施形態では、データ書き込みブロックDWBは、マイグレーション・データ・ブロックB6からB8のマイグレーションするコンテンツと一緒にマイグレーションされるように第2のファイル・システム管理ユニット410によって管理されるファイル・システム内のファイルファイルコンテンツにのみ書き込まれることもあり得る。他の実施形態では、マイグレーション効率を高めるために、データ書き込みブロックDWBは、第1のファイル・システム管理ユニット310によって管理されるファイル・システム内のファイルのファイルコンテンツに書き込まれ、位置W1から位置W2の間に穴をもたらし得る。次いで、データ書き込みブロックDWBのコンテンツは、
図17BのブロックB6’について上で説明されているのと同様の方式でマイグレーションされるときにマイグレーション・ブロックB7を完全にスキップし、ブロックB6およびB8のサイズを調整することによってマイグレーション・データ・ブロックB6からB8のマイグレーションにおいて後でスキップされ得る。
【0270】
しかしながら、後者の実施形態では、上記のいくつかの実施形態について説明されているようなスパース率の検出と組み合わされたとき、すなわち、マイグレーション・データ・ブロックがゼロのビットのみを有するかどうかを検出したときに、W1とW2との間の穴が、データがまだマイグレーションされていないという事実、またはW1からW2までの間の穴がユーザが意図するスパース率に従って故意に作成されているという点においてデータ書き込みブロックが実際にはW1から新規オブジェクト・ストア長OBJ2の終わり位置に及んでいるという事実によるものであるかどうかを決定することができることに問題が生じ得る。次いで、そのような問題は、新規データ書き込みに関係するデータ・ブロックが各新規データ書き込み要求に対して1だけインクリメントされるチェックポイント数を割り当てられたときに、チェックポイント数をデータのブロックに割り当てることによって解消され得る。
【0271】
次いで、W1とW2との間の穴が、ユーザの意図するスパース率によるものである(データ書き込みブロックDWBの意図されたスパースである部分として)場合、W1とW2との間の穴は、より新しいチェックポイント数を割り当てられる。しかしながら、W1とW2との間の穴が、データがまだマイグレーションされていないという事実により単に穴を表している場合に、W1からW2への穴は、より古いチェックポイント数を割り当てられ、その後、チェックポイント数の比較結果に基づき第2のファイル・システム管理ユニット410によって管理されるファイル・システム内のファイルのファイルコンテンツからマイグレーションされるものとするかどうかについて決定される。
【0272】
そのようなチェックポイント数は、ユーザ・データのデータ・ブロックおよびデータ・ブロックを直接指し、および/またはデータ・ブロックへの1つまたは複数の間接的ノード・ポインタを介して間接的に指す1つまたは複数のノード・ポインタを含むファイル・システム・オブジェクトのツリー構造を使用するファイル・システム管理について知られているようなファイル・システム管理パラメータであってよい。
【0273】
チェックポイント数を使用する上記の態様に関して、ファイル・システムのユーザ・データがデータ・ブロックに記憶される第1のファイル・システム管理の知られている方法があり、ファイル・システムは、ポインタ・ノードが1つまたは複数の他の間接的ポインタ・ノードを介して間接的にデータ・ブロックを指し、および/またはデータ・ブロックを直接的に指すことができる複数のポインタ・ノード(ときにはポインタ・ブロック、onodes、inodesなどと称される、ファイル・システム管理メタデータとして)を含むことに留意されたい。そのようなファイル・システム管理方法において、各ポインタ・ブロックを特定のチェックポイント数に関連付け、ファイル・システムのバージョンを示すチェックポイントを有するように関わっているデータ・ブロックおよびポインタ・ノードに対するファイル・システム修正アクセス毎にチェックポイント数をインクリメントすることが知られている。
【0274】
例えば、チェックポイント数のそのような例示的な使用は以下で説明され、また参照により本明細書に組み込まれている、米国特許第7,457,822B1号においてより詳しく説明されている。
図19Aから19Iは、米国特許第7,457,822B1号によるファイル・システム内の例示的なチェックポイント数メカニズムを例示的に示している(その
図23から31に対応している)。
【0275】
オブジェクト・ストア・サブモジュールが、オブジェクトを修正する要求を受信すると必ず、最初に、ルートonodeオブジェクト(ルート・ブロック・ポインタ)をチェックし、ルートonodeオブジェクトが作成されたチェックポイント数を決定する。最後の保持されているチェックポイントの作成前に、ルートonodeオブジェクトが作成された場合、ルートonodeオブジェクトは、チェックポイントを最後に保持していた部分である。この場合、ルートonodeオブジェクトは上で説明されているように修正され得ないが、このことが保持されているチェックポイントにおけるオブジェクトのバージョンを破損するからである。むしろ、オブジェクトは、以下で例によって説明されているような特別な方法で修正される。
【0276】
図19Aは、チェックポイント数1で作成された例示的なオブジェクトに対するオブジェクト構造を示している。オブジェクトは、4つのデータ・ブロック、すなわち、データ・ブロック0(2310)、データ・ブロック1(2312)、データ・ブロック2(2314)、およびデータ・ブロック3(2316)を含む。直接onode(直接ブロック・ポインタ)2306は、データ・ブロック0(2310)へのポインタと、データ・ブロック1(2312)へのポインタとを含む。直接onode2308は、データ・ブロック2(2314)へのポインタと、データ・ブロック3(2316)へのポインタとを含む。間接onode(間接ブロック・ポインタ)2304は、間接onode2306へのポインタと、直接onode2308へのポインタとを含む。ルートonode2302は、間接onode2304へのポインタを含む。すべてのonodeおよびすべてのデータ・ブロックは、チェックポイント1でマークされる。
【0277】
そこで、保持されているチェックポイントは、チェックポイント数2で取られ、データ・ブロック0(2310)は、チェックポイント数3において修正されると想定する。この場合、オブジェクト・ストア・サブモジュールは、最初に、オブジェクトに対するルートonode2302をロードし、ルートonode2302(チェックポイント数1で作成された)がチェックポイント数2で取られる最後に保持されているチェックポイントの前に作成されたことを認識する。オブジェクトの最新のバージョンへのアクセスを最適化するために、最新のルートonodeは、オブジェクト番号によって示されるセクタ番号にあることが好ましい。したがって、他の何かをする前に、オブジェクト・ストア・サブモジュールは、古いルートonode2302のコピーをディスク上の空き領域に保存し、保存されたルートonodeへのポインタを更新されたルートonodeに書き込み、更新されたルートonodeへのポインタを保存されたルートonodeに書き込む。
【0278】
図19Bは、古いルートonodeのコピーがディスク上の空き領域に保存された後のオブジェクト構造を示している。特に、ブロック2403は、ディスク上の空き領域に保存された古いルートonode2302のコピーを表す。現在のルートonode2402へのポインタは、保存されたルートonode2403に書き込まれる。ブロック2402は、チェックポイント数3を持つ更新されたルート・ノードを表す。保存されたルートonode2403へのポインタは、現在のルートonode2402に書き込まれる。
【0279】
次いで、オブジェクト・ストア・サブモジュールは、データ・ブロック0(2310)に対するディスクリプタに到達するまでルートonodeから始まるオブジェクト構造を横断する。データ・ブロック0(2310)は、サイドの保持されているチェックポイントが取られる前に作成されたので、収集され得ない。その代わりに、オブジェクト・ストア・サブモジュールは、データ・ブロック0(2310)のコピーを、必要なデータ修正を行った上、ディスク上の空き領域に書き込む。
【0280】
図19Cは、データ・ブロック0の修正されたコピーがディスク上の空き領域に書き込まれた後のオブジェクト構造を示している。特に、ブロック2510は、ディスク上の空き領域に書き込まれたデータ・ブロック0の修正されたコピーを表す。ブロック2510は、チェックポイント数3(すなわち、それが作成されたチェックポイント)を含む。
【0281】
そこで、オブジェクト・ストア・サブモジュールは、新規データ・ブロック2510へのポインタを直接onodeに置く必要があるが、オブジェクト・ストア・サブモジュールは、直接onode2306が保持されているチェックポイントの一構成要素であるので新規データ・ブロック2510へのポインタを直接onode2306内に置くことができない。したがって、オブジェクト・ストア・モジュールは、新規データ・ブロック0(2510)および古いデータ・ブロック1(2312)へのポインタを有する新規直接onodeを作成する。
【0282】
図19Dは、新規直接onodeが新規データ・ブロックに対して作成された後のオブジェクト構造を示している。特に、ブロック2606は、新規直接onodeを表す。ブロック2606は、チェックポイント数3、さらには新規データ・ブロック0(2510)および古いデータ・ブロック1(2312)へのポインタを含む。
【0283】
そこで、オブジェクト・ストア・サブモジュールは、新規データ・ブロック2606へのポインタを間接onodeに置く必要があるが、オブジェクト・ストア・サブモジュールは、間接onode2304が保持されているチェックポイントの一構成要素であるので新規データ・ブロック2606へのポインタを間接onode2304内に置くことができない。したがって、オブジェクト・ストア・モジュールは、新規直接onode2606および古い直接onode2308へのポインタを有する新規間接onodeを作成する。
【0284】
図19Eは、新規間接onodeが新規直接onodeに対して作成された後のオブジェクト構造を示している。特に、ブロック2704は、新規間接onodeを表す。ブロック2704は、チェックポイント数3、さらには新規直接onode2606および古い直接onode2308へのポインタを含む。
【0285】
最後に、オブジェクト・ストア・サブモジュールは、新規間接onode2704へのポインタをオブジェクトのルートonode2402の現在のバージョンに書き込む。
【0286】
図19Fは、新規間接onode2704へのポインタがオブジェクトのルートonode2402の現在のバージョンに書き込まれた後のオブジェクト構造を示している。
【0287】
データ・ブロック0の修正の後、ブロック2403、2304、2306、および2310は、保持されているチェックポイントの構成要素であるが、オブジェクトの現在のバージョンの構成要素ではなく、ブロック2308、2312、2314、および2316は、保持されているチェックポイントとオブジェクトの現在のバージョンの両方の構成要素であり、ブロック2402、2704、2606、および2510は、オブジェクトの現在のバージョンの構成要素であるが、保持されているチェックポイントの構成要素ではないことに留意されたい。
【0288】
そこで、保持されているチェックポイントは、チェックポイント数4で取られ、データ・ブロック3(2316)は、チェックポイント数5において削除されると想定する。手順は、ここでは、データ・ブロック0を修正するための上で説明されている手順に類似しており、データ・ブロック3を削除した後のオブジェクト構造を示す
図19Gを参照しつつ説明されている。
【0289】
この場合、オブジェクト・ストア・サブモジュールは、ブロック2903によって表される、チェックポイント数3からの古いルートonodeのコピーをディスク上の空き領域に保存し、ルートonodeオブジェクト2902をチェックポイント数5を含むように更新し、現在および保存されたルートonode内のさまざまなポインタを更新する。特に、保存されたルートonode2903は、本質的に、現在のルートonode2902とそれ以前の保存されたルートonode2403との間の二重連結リスト内に挿入される。現在のルートonode2902において、より古いルートonodeバージョンへのポインタは、それ以前の保存されたルートonode2403ではなく保存されたルートonode2903を指すように更新される。それ以前のルートonode2403において、より新しいルートonodeバージョンへのポインタは、現在のルートonode2902ではなくより新しい保存されたルートonode2903を指すように更新される。保存されたルートonode2903において、より新しいルートonodeバージョンへのポインタは、現在のルートonode2902を指すように更新されるが、より古いルートonodeバージョンへのポインタは、それ以前の保存されたルートonode2403を指すように更新される。
【0290】
次いで、オブジェクト・ストア・サブモジュールは、データ・ブロック3(2316)に対するディスクリプタを含む、直接onode2308に到達するまでルートonodeから始まるオブジェクト構造を横断する。直接onode2308およびデータ・ブロック3(2316)は、既存の保持されているチェックポイントの構成要素であるので、オブジェクト・ストア・サブモジュールは、単純に、データ・ブロック3(2316)を削除し、直接onode2308を修正して、データ・ブロック3(2316)に対するディスクリプタを取り除くことはできない。したがって、オブジェクト・ストア・サブモジュールは、チェックポイント数5、およびデータ・ブロック2(2314)へのポインタを有するが、データ・ブロック3(2316)へのポインタを有しない新規直接onode2908を作成する。オブジェクト・ストア・サブモジュールは、チェックポイント数5、および古い直接onode2606および新規直接onode2908へのポインタを有する新規間接onode2904も作成する。最後に、オブジェクト・ストア・サブモジュールは、新規間接onode2904へのポインタをルートonode2902の現在のバージョンに書き込む。
【0291】
データ・ブロック3の削除の後、ブロック2903、2403、2304、2704、2306、2308、2310、および2316は、少なくとも1つの保持されているチェックポイントの構成要素であるが、オブジェクトの現在のバージョンの構成要素ではなく、ブロック2606、2510、2312、および2314は、オブジェクトの現在のバージョンおよび少なくとも1つの保持されているチェックポイントの構成要素であり、ブロック2902、2904、および2908は、オブジェクトの現在のバージョンの構成要素であるが、保持されているチェックポイントの構成要素ではないことに留意されたい。
【0292】
オブジェクト・ストア・サブモジュールが、オブジェクト上で操作を実行するように求められたときに、それはオブジェクトを識別することを可能にするハンドルを渡される。とりわけ、このハンドルは、要求されたオブジェクトのチェックポイント数を指定する。通常、これは、オブジェクトの現在のバージョンを示す値に設定される。しかしながら、異なるチェックポイント数が指定された場合、オブジェクト・ストア・サブモジュールは、オブジェクトの要求されたバージョン上でその操作を実行する。
【0293】
オブジェクト・ストア・サブモジュールは、要求されたチェックポイント数またはそれ以前のチェックポイント数を有するルートonodeが見つかるまで、ルートonodeのより新しいバージョンからルートonodeのより古いバージョンへのポインタを使用して、現在および保存されたルートonodeを1ステップずつ進むことによってオブジェクトの要求されたバージョンを見つけることを試みる。次いで、オブジェクト・ストア・サブモジュールは、そのルートonodeからオブジェクト構造を横断する。これは、
図19Gを再び参照しつつ例によって示されている。
【0294】
オブジェクト・ストア・サブモジュールが、チェックポイント数5に対する要求を受信した場合、オブジェクト・ストア・サブモジュールは、最初に、ルートonodeオブジェクト2902の現在のバージョンに進む。現在のルートonode2902は、要求されたチェックポイント数である、チェックポイント数5を有する。したがって、オブジェクト・ストア・サブモジュールは、ルートonode2902からオブジェクト構造を横断し、オブジェクトの要求されたバージョンを提供する。特に、ルートonode2902は、間接onode2904を指す。間接onode2904は、直接onode2606および2908を指す。直接onode2606は、修正されたデータ・ブロック0(2510)およびデータ・ブロック1(2312)を指す。直接onode2908は、データ・ブロック2(2314)を指す。したがって、オブジェクトの現在のバージョンは、修正されたデータ・ブロック0を含み、削除されたデータ・ブロック3を除外する。
【0295】
オブジェクト・ストア・サブモジュールが、チェックポイント数4に対する要求を受信した場合、オブジェクト・ストア・サブモジュールは、最初に、ルートonodeオブジェクト2902の現在のバージョンに進む。現在のルートonode2902は、あまりにも最近すぎる、チェックポイント数5を有し、したがって、オブジェクト・ストア・サブモジュールは、保存されたルートonode2903までポインタを辿る。ルートonode2903は、オブジェクトの要求されたバージョンよりも時間的に早い、チェックポイント数3を有する。したがって、オブジェクト・ストア・サブモジュールは、ルートonode2903からオブジェクト構造を横断し、オブジェクトの要求されたバージョンを提供する。特に、ルートonode2903は、間接onode2704を指す。間接onode2704は、直接onode2606および2308を指す。直接onode2606は、修正されたデータ・ブロック0(2510)およびデータ・ブロック1(2312)を指す。直接onode2308は、データ・ブロック2(2314)およびデータ・ブロック3(2316)を指す。したがって、チェックポイント数4に対する保持されているチェックポイントは、修正されたデータ・ブロック0を含み、データ・ブロック3も含む。
【0296】
オブジェクト・ストア・サブモジュールが、チェックポイント数2に対する要求を受信した場合、オブジェクト・ストア・サブモジュールは、最初に、ルートonodeオブジェクト2902の現在のバージョンに進む。現在のルートonode2902は、あまりにも最近すぎる、チェックポイント数5を有し、したがって、オブジェクト・ストア・サブモジュールは、ルートonode2902内のポインタを使用して保存されたルートonode2903にアクセスする。保存されたルートonode2903は、これもまたあまりにも最近すぎる、チェックポイント数3を有し、したがって、オブジェクト・ストア・サブモジュールは、ルートonode2903内のポインタを使用して保存されたルートonode2403にアクセスする。保存されたルートonode2403は、オブジェクトの要求されたバージョンよりも時間的に早い、チェックポイント数1を有する。次いで、オブジェクト・ストア・サブモジュールは、保存されたルートonode2403からオブジェクト構造を横断し、オブジェクトの要求されたバージョンを提供する。特に、ルートonode2403は、間接onode2304を指す。間接onode2304は、直接onode2306および2308を指す。直接onode2306は、データ・ブロック0(2310)およびデータ・ブロック1(2312)を指す。直接onode2308は、データ・ブロック2(2314)およびデータ・ブロック3(2316)を指す。したがって、チェックポイント数2に対する保持されているチェックポイントは、元の4個のデータ・ブロックを含む。
【0297】
オブジェクト・ストア・サブモジュールが、オブジェクトの要求されたバージョンを見つけることができない場合、オブジェクト・ストア・サブモジュールは、典型的には、エラー・メッセージを生成することに留意されたい。例えば、
図19Gを再び参照すると、オブジェクト・ストア・サブモジュールが、チェックポイント数0に対する要求を受信した場合、オブジェクト・ストア・サブモジュールは、ルートonodeオブジェクト2403に到達するまでルートonodeを1ステップずつ進む。ルートonode2403は、あまりにも最近すぎるが、それ以前のルートonodeへのポインタを有することもなく、したがってオブジェクト・ストア・サブモジュールはオブジェクトの要求されたバージョンを見つけることができなかったことを示すエラー・メッセージを生成する。
【0298】
また、保持されているチェックポイントは、修正されることを許されず、オブジェクト・ストア・サブモジュールは、読み出し操作がそれらの上で実行されることのみを許すべきである。
【0299】
保持されているチェックポイントを削除するプロセスには2段階ある。第1の段階は、削除される保持されているチェックポイントにおいて作成されるかまたは修正されるかのいずれかであったオブジェクトのすべてのリストを取得することを伴う。これは、すべての保持されているチェックポイントについて生成される特別なオブジェクト(修正保持リスト・オブジェクト)を用いて達成される。このオブジェクトは、ボリュームが、全く初めて、または保持されているチェックポイントが取られた後に開かれるときに作成される。オブジェクトが作成されるか、または初めてオブジェクトが修正される毎に、それが以前の保持されているチェックポイント内に作成された場合、オブジェクト番号が、このオブジェクトに書き込まれる。この特別なオブジェクトに対するオブジェクト番号は、動的スーパーブロック内に記憶される。保持されているチェックポイントを作成する前に、ソフトウェアが、その保持されているチェックポイントを後で削除したいときのためにこの特別なオブジェクトのオブジェクト番号を記録する。
【0300】
保持されているチェックポイントを削除する第2の段階は、保持されているチェックポイント内に作成されるか、または修正される各オブジェクトについて操作の次のシーケンスを伴う。
1.別の操作によって使用され得ないようにオブジェクトをロックする。これは、保持されているチェックポイントがライブ・ファイル・システム上で削除される場合にのみ必要である。
2.保持されているチェックポイントに対するルートonode、以前の保持されているチェックポイント(もし存在すれば)に対するルートonode、および次の保持されているチェックポイント(もし存在すれば)または最近の保持されているチェックポイントが削除されているが、オブジェクトは削除されていない場合にオブジェクトの現在のバージョンに対するルートonodeを見つける。
3.削除される保持されているチェックポイントの構造を調べて、それによって使用されるすべての間接および直接onodeならびにデータ・ブロックを識別する。そのようなonodeおよびデータ・ブロック毎に、アイテムが削除される保持されているチェックポイントによってのみ使用されるかどうかを決定する。これは、オブジェクトの以前のバージョンと次のバージョンの両方における同等のアイテムを見つけることによって行われ得る。同等のアイテムが、オブジェクトの以前のバージョンと次のバージョンとで異なる場合、アイテムは、保持されているチェックポイントに固有のものである。
4.アイテムが、削除される保持されているチェックポイントによってのみ使用される場合、それはもはや必要でなく、したがって空き領域に戻される。アイテムが、次の保持されているチェックポイントによって使用される場合、アイテムは、次の保持されているチェックポイントに対する更新された保持されているオブジェクトのリスト内にすでになければ、次のチェックポイントに対する更新された保持されているオブジェクトのリストに追加される。アイテムを更新された保持されているオブジェクトのリストに追加することによって、オブジェクト・ストア・サブモジュールは、その保持されているチェックポイントが削除されることになったときにまだ必要であるかどうかをチェックすることを知る。
5.最後に、この保持されているチェックポイントに対するルートonodeが、この保持されているチェックポイントでのみ使用される場合、それもまたもはや必要なく、削除される。この場合、より古い保持されているチェックポイントがある場合、削除される保持されているチェックポイントのルートonodeを以前に指していた、ルートonode(もしあれば)の次のバージョンから逆向きのポインタが、以前の保持されているチェックポイントのルートonodeを指すように更新される。
【0301】
ファイル・システムの完全性を維持するために、保持されているチェックポイントの削除がチェックポイントを取るプロセスとどのように結び付いているかに十分注意し、チェックポイントが常にファイル・システムの一貫したビューを表すこと、および保持されているチェックポイントを削除している最中に生じたクラッシュから回復できることを確認する必要がある。
【0302】
保持されているチェックポイントを削除することは、例によって示され得る。
図19Gを再び参照し、チェックポイント数4で作成された保持されているチェックポイントが削除されると想定する。この保持されているチェックポイントは、ルートonode2903によって表される。この保持されているチェックポイントによってのみ使用される構造内のアイテムはルートonode2903および間接onode2704だけである。これらのonodeは、空き領域に戻される。ルートonode2902は、削除されたルートonode2903ではなくルートonode2403を指すように更新される。
図19Hは、チェックポイント数4に対する保持されているチェックポイントが削除された後のオブジェクト構造を示している。
【0303】
そこで、
図19Hを再び参照して、オブジェクトの現在のバージョンが削除されるが、チェックポイント数2に対する保持されているチェックポイントは依然として存在すると想定する。これは、現在のバージョンに固有の構造内のアイテムのすべてを識別し、それらを空き領域に戻す必要があるという点において保持されているチェックポイントが削除される場合に類似している。この場合、onode2904、2606、および2908は、オブジェクトの現在のバージョンに使用されるが、残っている保持されているチェックポイントには使用されず、したがって、それらのonodeは、空き領域に戻される。現在のルートonode2902は、削除されたオブジェクトを現在参照しているが、少なくとも1つの有効な保持されているチェックポイントへのポインタを有することを示すように修正される。
図19Iは、オブジェクトの現在のバージョンが削除された後のオブジェクト構造を示している。
【0304】
このオブジェクトに対するすべての残っている保持されているチェックポイントが削除されたとき、ルートonode2902の現在のバージョンは、空き領域にではなく空きルートonodeキューに戻される。
【0305】
いくつかの条件の下で、ライブ・ファイル・システムを保持されているチェックポイントによって表されるバージョンに戻すことが必要であるか、または望ましい場合がある。ライブ・ファイル・システムを保持されているチェックポイントによって表されるバージョンに戻すことは、多数の異なる方法で遂行され得る。ライブ・ファイル・システムを保持されているチェックポイントに戻すことは、以下のようなことを伴い得る。
1.保持されているチェックポイントに関連付けられているルートonodeの関連するコンテンツを現在のルートonodeにコピーすること(例えば、直接および間接onodeおよびデータ・ブロックへのポインタ、それ以前の保持されているチェックポイントへのポインタなど)。
2.先行する保持されているチェックポイント(もし存在すれば)に関連付けられているルートonodeを識別し、そのルートonode内のポインタを、ライブ・ファイル・システムが戻されようとしている保持されているチェックポイントに関連付けられているルートonodeではなく現在のルートonodeを指すように修正すること。
3.保持されているチェックポイントに関連付けられているルートonodeを削除すること。
4.更新されたチェックポイントのオブジェクトのリストをクリアすること(すなわち、ライブ・ファイル・システムを保持されているチェックポイントによって表されるバージョンに戻した後、事実上修正されたオブジェクトはない)。
5.ライブ・ファイル・システムが戻されようとしている保持されているチェックポイントの後に取られた保持されているチェックポイントに関連付けられているルートonodeおよび他のオブジェクトを含む、保持されているチェックポイントの後に作成されたすべてのオブジェクトを削除すること。
【0306】
以前に保持されていたチェックポイントに関連付けられているルートonode内のポインタを修正すること以外に、もし存在すれば、より古い保持されているチェックポイントは変更されることなく残されるべきである。しかしながら、すべてのより新しい保持されているチェックポイントは、事実上削除される。
【0307】
保持されているチェックポイントに通常関連付けられている他のすべての機能は、ここで説明されているメカニズムを使用して達成され得る。例えば、インクリメンタル・バックアップは、更新された保持されているオブジェクトのリストを使用して連続する保持されているチェックポイントの間で何が変わったかを見いだすことによって実行され得る。
【0308】
上述の実施形態の構造の特徴、コンポーネント、および特定の詳細は、それぞれのアプリケーションに合わせて最適化されたさらなる実施形態を形成するように交換されるか、または組み合わされ得る。これらの修正が、当業者にとって容易にはっきり理解できるものである限り、それらは、本発明の説明を簡潔にするために、可能なあらゆる組合せを明示的に指定することなく上記の説明によって暗黙のうちに開示されるものとする。