(57)【要約】      （修正有）【課題】ＮＡＳシステムにおいて継続的にファイルシステムの保護を可能にする。【解決手段】ＮＡＳシステムは、ファイルシステムデータを格納するボリューム２０７、このファイルシステムデータのスナップショット（コピー）を格納するボリューム２０９、ＮＡＳクライアントから送信された要求のジャーナル（ログ）を格納するボリューム２１１を管理する。ファイルシステムデータを格納するボリュームのスナップショットを定期的に作成し、スナップショットが作成された後でファイルシステムデータへの要求を記録する。システムが特定の時点におけるファイルシステムデータのイメージのリストアを必要とする場合は、このスナップショットをリストアし、記録された要求を順番に再実行する。【選択図】図１
2008033912.tif 000002
【特許請求の範囲】
【請求項１】
ａ．ファイルシステムボリューム、スナップショットボリューム、およびジャーナルボリュームを備えるＮＡＳシステムと、
ｂ．前記ＮＡＳシステムに接続され、前記ＮＡＳシステムに要求を送信するように動作できるＮＡＳクライアントとを備えており、前記ＮＡＳシステムは、
ｉ．データを前記ファイルシステムボリュームに格納し、
ｉｉ．前記ファイルシステムボリューム内の前記データのスナップショットイメージを前記スナップショットボリュームに格納し、
ｉｉｉ．前記要求に関する情報を前記ジャーナルボリュームに格納し、
ｉｖ．前記ＮＡＳクライアントから発行されたリストアコマンドに応答して、前記ジャーナルボリュームのレコードを前記スナップショットボリュームの内容に適用するように動作できること
を特徴とするコンピュータ制御によるデータストレージシステム。
【請求項２】
前記要求はＮＦＳ要求であることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項３】
前記ＮＡＳシステムは、前記データの変更を含む要求のみに関する情報を前記ジャーナルボリュームに格納するように動作できることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項４】
前記ジャーナルボリュームはジャーナルヘッダとジャーナルデータを備えるジャーナルレコードを備えることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項５】
前記ファイルシステムボリュームによって格納されたデータのファイルハンドルとパスとのマッピングを格納するように動作できるファイルハンドルストアをさらに備えることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項６】
前記ＮＡＳシステムは、さらに前記要求から前記ファイルハンドルを取得し、前記取得されたファイルハンドルが前記ファイルハンドルストアに格納されているかどうかを確認し、格納されていない場合は前記パスを取得して前記ファイルハンドルと前記パスを前記ファイルハンドルストアに格納するように動作できることを特徴とする請求項５に記載のコンピュータ制御によるデータストレージシステム。
【請求項７】
前記ファイルシステムボリューム内の前記データを新しいボリュームにリストアするときに、前記ＮＡＳシステムは、さらに前記ファイルハンドルストアの前記内容を使用して前記新しいボリュームのファイルハンドル情報を生成するように動作できることを特徴とする請求項５に記載のコンピュータ制御によるデータストレージシステム。
【請求項８】
前記ファイルシステムボリューム内の前記データを新しいボリュームにリストアするときに、前記ＮＡＳシステムは、さらに、
ａ．前記ジャーナルボリュームに格納された前記要求の情報からファイルハンドルを取得し、
ｂ．前記ファイルハンドルストアから前記ファイルハンドルに対応するパスを取得し、
ｃ．リストアされたファイルシステム内で前記パスのルックアップを実行し、
ｄ．前記ファイルハンドルに関する要求を再実行するように動作できることを特徴とする請求項７に記載のコンピュータ制御によるデータストレージシステム。
【請求項９】
前記ＮＡＳシステムは、さらに前記ジャーナルボリュームに格納された個々の要求情報にシーケンス番号を割り当てるように動作できることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項１０】
前記ＮＡＳシステムは、さらに前記ジャーナルボリュームの空き容量を確認し、前記確認されたジャーナルボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかのジャーナルレコードを削除するように動作できることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項１１】
前記ＮＡＳシステムは、さらに前記スナップショットボリュームの空き容量を確認し、前記確認されたスナップショットボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかのスナップショットを削除するように動作できることを特徴とする請求項１に記載のコンピュータ制御によるデータストレージシステム。
【請求項１２】
ａ．ジャーナルグループを作成するステップを備えており、前記ジャーナルグループはＮＡＳに関連付けられたファイルシステムとジャーナルボリュームとを備えることと、
ｂ．前記ファイルシステムに送信されたＮＦＳ要求をジャーナルに記録するステップを備えており、ジャーナルに記録するステップはジャーナルに記録された個々のＮＦＳ要求に第１のシーケンス番号を割り当てるステップを備えることと、
ｃ．前記ファイルシステム内のデータのスナップショットを作成するステップを備えており、スナップショットを作成するステップは前記スナップショットに第２のシーケンス番号を割り当てるステップを備えることと
を特徴とする方法。
【請求項１３】
ａ．リストアコマンドを受信するステップと、
ｂ．前記受信したリストアコマンドに応答して、前記ジャーナルに記録されたＮＦＳ要求の少なくとも一部を前記スナップショットに適用してデータイメージをリストアするステップと
をさらに備えることを特徴とする請求項１２に記載の方法。
【請求項１４】
前記リストアコマンドは前記リストアデータの日時を指定することを特徴とする請求項１２に記載の方法。
【請求項１５】
前記ジャーナルに記録されたＮＦＳ要求には前記データの変更が含まれることを特徴とする請求項１２に記載の方法。
【請求項１６】
前記ＮＦＳ要求はジャーナルヘッダとジャーナルデータを備えるジャーナルレコードを格納するジャーナルボリュームに記録されることを特徴とする請求項１２に記載の方法。
【請求項１７】
ジャーナルボリュームの空き容量を確認し、前記確認されたジャーナルボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかのジャーナルレコードを削除するステップをさらに備えることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記ファイルシステムによって格納されたデータのファイルハンドルとパスとのマッピングを作成するステップをさらに備えることを特徴とする請求項１３に記載の方法。
【請求項１９】
ｉ．前記ＮＦＳ要求から前記ファイルハンドルを取得するステップと、
ｉｉ．前記取得されたファイルハンドルが前記ファイルハンドルストアに格納されているかどうかを確認し、格納されていない場合は前記パスを取得して前記ファイルハンドルと前記パスとを格納するステップと
をさらに備えることを特徴とする請求項１８に記載の方法。
【請求項２０】
適用するステップは、前記ファイルハンドルとパスとのマッピングを使用して前記ファイルシステムのリストア先となる新しいボリュームのファイルハンドル情報を生成するステップを備えることを特徴とする請求項１８に記載の方法。
【請求項２１】
ａ．前記ジャーナルに記録されたＮＦＳ要求からファイルハンドルを取得するステップと、
ｂ．前記マッピングから前記ファイルハンドルに対応するパスを取得するステップと、
ｃ．リストアされたファイルシステム内で前記パスのルックアップを実行するステップと、
ｄ．前記ファイルハンドルに関する要求を再実行するステップと
をさらに備えることを特徴とする請求項１８に記載の方法。
【請求項２２】
前記ＮＡＳシステムは、さらに前記ジャーナル空き容量を確認し、前記確認されたジャーナル空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかのジャーナルレコードを削除するように動作できることを特徴とする請求項１８に記載の方法。
【請求項２３】
ａ．前記スナップショットをスナップショットボリュームに格納するステップと、
ｂ．前記スナップショットボリュームの空き容量を確認するステップと、
ｃ．前記確認されたスナップショットボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかの格納されたスナップショットを削除するステップと
をさらに備えることを特徴とする請求項１８に記載の方法。
【請求項２４】
ａ．ジャーナルグループを作成するコードを備えており、前記ジャーナルグループはＮＡＳおよびジャーナルボリュームに関連付けられたファイルシステムを備えることと、
ｂ．前記ファイルシステムに送信されたＮＦＳ要求をジャーナルに記録するコードを備えており、ジャーナルに記録することはジャーナルに記録された個々のＮＦＳ要求に第１のシーケンス番号を割り当てるコードを備えることと、
ｃ．前記ファイルシステム内のデータのスナップショットを作成するコードを備えており、スナップショットを作成することは前記スナップショットに第２のシーケンス番号を割り当てるコードを備えることと
を特徴とするコンピュータ可読媒体に組み込まれたコンピュータプログラミング製品。
【請求項２５】
ａ．リストアコマンドを受信するコードと、
ｂ．前記受信したリストアコマンドに応答して、前記ジャーナルに記録されたＮＦＳ要求の少なくとも一部を前記スナップショットに適用してデータイメージをリストアするコードと
をさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項２６】
前記リストアコマンドは前記リストアデータの日時を指定することを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項２７】
前記ジャーナルに記録されたＮＦＳ要求には前記データの変更が含まれることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項２８】
前記ＮＦＳ要求はジャーナルヘッダとジャーナルデータを備えるジャーナルレコードを格納するジャーナルボリュームに記録されることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項２９】
ジャーナルボリュームの空き容量を確認し、前記確認されたジャーナルボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかのジャーナルレコードを削除するコードをさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項３０】
前記ファイルシステムによって格納されたデータのファイルハンドルとパスとのマッピングを作成するコードをさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項３１】
ｉ．前記ＮＦＳ要求から前記ファイルハンドルを取得するコードと、
ｉｉ．前記取得されたファイルハンドルが前記ファイルハンドルストアに格納されているかどうかを確認し、格納されていない場合は前記パスを取得して前記ファイルハンドルと前記パスを格納するコードと
をさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項３２】
適用することは、ファイルハンドルとパスとのマッピングを使用して前記ファイルシステムのリストア先となる新しいボリュームのファイルハンドル情報を生成することを備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項３３】
ａ．前記ジャーナルに記録されたＮＦＳ要求からファイルハンドルを取得するコードと、
ｂ．前記マッピングから前記ファイルハンドルに対応するパスを取得するコードと、
ｃ．リストアされたファイルシステム内で前記パスのルックアップを実行するコードと、
ｄ．前記ファイルハンドルに関する要求を再実行するコードと
をさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【請求項３４】
ａ．前記スナップショットをスナップショットボリュームに格納するコードと、
ｂ．前記スナップショットボリュームの空き容量を確認し、前記確認されたスナップショットボリュームの空き容量が事前に指定されたしきい値を下回る場合に、少なくともいくつかの格納されたスナップショットを削除するコードと
をさらに備えることを特徴とする請求項２４に記載のコンピュータプログラミング製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルサーバーまたはＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）システムに関し、特にファイルシステムデータのバックアップとリカバリに関する。
【背景技術】
【０００２】
歴史的に、ストレージボリューム内のデータの喪失を防止するために、さまざまな方法が使用されてきた。従来の一般的な方法は、定期的に（たとえば１日に１度）ボリューム内のデータのバックアップを作成し、バックアップメディア（たとえば磁気テープ）にバックアップを書き込むことである。ボリューム内のデータをリストアする必要がある場合は、バックアップメディアに保存されたデータが読み出され、新しいボリュームに書き込まれる。ただし、このバックアップ技術でリストアできるのは、バックアップが作成された時点のボリューム内のデータイメージに限定される。したがって、リストアされたデータも壊れている場合は、前の期間または次の期間に作成されたバックアップデータをリストアする必要がある。
【０００３】
最近になって、ジャーナル記録（ｊｏｕｒｎａｌｉｎｇ）機能を備えるストレージシステムが開発されている。ジャーナル記録は、データの喪失を防止するために使用できる方法の１つである。ジャーナル記録の方法において、ストレージボリューム内のデータのイメージは特定の時点で作成されたものである。こうしたイメージは、一般的にスナップショットと呼ばれている。スナップショットが作成された時点より後でボリュームに対して行われた後続の変更の履歴（すなわちジャーナル）も保持される。データのリストアは、スナップショットにジャーナルを適用することによって実現される。この方法では、ボリューム内のデータを任意の時点の状態にリストアできる。参照により本明細書に組み込まれている米国特許出願公開第２００４／０２６８０６７号明細書、「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｂａｃｋｕｐ  ａｎｄ  Ｒｅｃｏｖｅｒｙ  Ｓｙｓｔｅｍ  Ｕｓｉｎｇ  Ｓｔｏｒａｇｅ  Ｂａｓｅｄ  Ｊｏｕｒｎａｌｉｎｇ」には、ジャーナル記録機能を備える例示的なストレージシステムが開示されている。ジャーナルストレージシステム（ｊｏｕｒｎａｌｉｎｇ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍ）は、ストレージボリューム内のデータのスナップショットを定期的に作成でき、個々のスナップショットを作成した後にこのボリュームに対して行われた変更のジャーナルを保持できる。スナップショットとジャーナルエントリはデータボリュームとは別に格納される。ボリューム内のデータは、スナップショットとジャーナルエントリからブロックレベルでリストアできる。前述のようにスナップショットとジャーナルエントリを使用してボリューム内のデータを保護する機能を備える技術は、ＣＤＰ（Ｃｏｎｔｉｎｕｏｕｓ  Ｄａｔａ  Ｐｒｏｔｅｃｔｉｏｎ）と呼ばれている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、ＮＡＳシステムにこうしたＣＤＰを採用するには難しい問題がある。具体的に言えば、ＮＡＳシステムアーキテクチャにおいて、どの時点のデータをリストアするかは、ファイルシステム操作、たとえば不適切なファイルの削除、不適切なファイルへの書き込み、不適切なファイルの名前の変更などによって指定する必要がある。したがって、ＣＤＰ技術を使用してＮＡＳファイルシステムを保護できるようにするには、ＮＡＳシステムが各ストレージシステム操作の完了日時を追跡し、この完了日時の情報をＣＤＰシステムに提供する必要がある。しかし、ＮＡＳシステム内でこうした機能を実装するのは複雑な作業である。
【０００５】
このように、求められているのはファイルサーバーおよびＮＡＳシステム向けの継続的データ保護を可能にする技術である。
【課題を解決するための手段】
【０００６】
本発明の方法は、従来のデータ保護技術に関連する前述の問題およびその他の問題（１つまたは複数）を実質的に除去する方法およびシステムを目的とする。
【０００７】
本発明概念の１つの態様により、１つのＮＡＳシステムとこのＮＡＳシステムに接続された１つのＮＡＳクライアントを備えるコンピュータ制御によるデータストレージシステムが提供される。ＮＡＳシステムには、ファイルシステムボリューム、スナップショットボリューム、およびジャーナルボリュームが含まれる。ＮＡＳクライアントは、ＮＡＳシステムに対して要求を発行するように構成されている。ＮＡＳシステムでは、データがファイルシステムボリュームに格納され、ファイルシステムボリューム内のデータのスナップショットイメージがスナップショットボリュームに格納され、要求に関する情報がジャーナルボリュームに格納され、さらにＮＡＳクライアントから発行されるリストアコマンドに応答してスナップショットボリュームの内容にジャーナルボリューム内のレコードが適用される。
【０００８】
本発明概念の別の態様により、ＮＡＳおよびジャーナルボリュームに関連付けられたファイルシステムを含むジャーナルグループを作成するステップと、ファイルシステムに送信されたＮＦＳ要求をジャーナルに記録するステップ（ジャーナルに記録された各々のＮＦＳ要求に第１のシーケンス番号を割り当てるステップを含む）と、ファイルシステム内のデータのスナップショットを作成するステップ（このスナップショットに第２のシーケンス番号を割り当てるステップを含む）とを含む方法が提供される。
【０００９】
本発明概念のさらに別の態様により、ＮＡＳとジャーナルボリュームに関連付けられたファイルシステムを含むジャーナルグループを作成するコードを含むコンピュータ可読媒体として具体化されたコンピュータプログラミング製品の方法が提供される。本発明のプログラミング製品は、ファイルシステムに送信されたＮＦＳ要求をジャーナルに記録するコード（ジャーナルに記録された各々のＮＦＳ要求に第１のシーケンス番号を割り当てるコードを含む）と、ファイルシステム内のデータのスナップショットを作成するコード（このスナップショットに第２のシーケンス番号を割り当てるコードを含む）とをさらに備えている。
【００１０】
本発明に関連するその他の態様については、一部については以下で説明し、一部については以上の説明から明らかになるか、あるいは本発明の実施によって理解できる。本発明の態様は、以下の詳細な説明と添付の特許請求の範囲で詳細に説明する要素とさまざまな要素および態様の組合せによって実現され、達成される。
【００１１】
以上および以下の説明は、いずれも説明を目的とする例示的なものにすぎず、請求された発明またはその適用を限定する意図はいかなる形においても一切ないことを理解されたい。
【００１２】
本明細書に組み込まれ、本明細書の重要な要素である添付の図面は、以下の説明と連携して本発明の実施形態の例を示し、本発明の技術の原理を説明する役割を果たしている。
【発明を実施するための最良の形態】
【００１３】
以下の詳細な説明では、添付の図面を参照しながら説明する。図面では、同等の機能要素は同様の番号で示されている。前述の添付図面は、本発明の原理に適合する特定の実施形態および実装を説明するために示すものであり、これを限定する意図はない。このような実装については、当業者が本発明を実施できるように以下で十分詳細に説明する。また、その他の実装を使用できること、および本発明の範囲と精神を逸脱することなくさまざまな要素の構造上の変更および／または代替が可能であることを理解されたい。したがって、以下の詳細な説明を限定の意味に解釈してはならない。さらに、本発明のさまざまな実施形態は、以下で説明するように、汎用コンピュータで実行するソフトウェアの形、専用のハードウェアの形、ソフトウェアとハードウェアの組合せのいずれで実装してもよい。
【００１４】
図１は、本発明技術の実施形態の概要を示している。図１に示す本発明のシステムには、ＮＡＳシステム１００と１つまたは複数のＮＡＳクライアント１１３が含まれる。個々のＮＡＳクライアント１１３には、ＮＦＳ／ＣＩＦＳクライアント２１３とリストアダイレクタ（Ｒｅｓｔｏｒｅ  Ｄｉｒｅｃｔｏｒ）２２４が含まれる。ＮＡＳシステムには、１つまたは複数のファイルシステムボリューム２０７が組み込まれており、これらはジャーナルグループ２１４に統合されている。ＮＡＳシステム１００は、ジャーナルグループ２１４のボリューム２０７のスナップショットコピーを作成し、前述のスナップショットコピーをスナップショットボリューム２０９（集合的にスナップショット２１５を構成する）に書き込むように機能できる。さらに、ＮＡＳシステム１００にはジャーナルボリューム２１１が組み込まれている。図１に示すその他の要素については、他の図面を参照しながら以下でさらに詳しく説明する。
【００１５】
システム構成
図２は、本発明の原理に適合する技術を実装できるストレージシステムの例示的な構成を示している。図示されたシステムには、ＮＡＳシステム１００と１つまたは複数のＮＡＳクライアント１１３が含まれる。ＮＡＳシステム１００には、ＮＡＳコントローラ１０１とストレージシステム１０２が含まれる。ＮＡＳコントローラ１０１には、ＣＰＵ  １０３、メモリ１０４、ネットワークアダプタ１０５、およびストレージアダプタ１０６が含まれる。こうしたコンポーネントは、バス１０７を経由して相互に接続されている。
【００１６】
ストレージシステム１０２には、ディスクコントローラ１０８、キャッシュメモリ１０９、ディスクドライブ１１０、およびストレージインターフェイス１１１が含まれる。こうしたコンポーネントは、バス１１２を経由して相互に接続されている。ＮＡＳコントローラ１０１とストレージシステム１０２は、ストレージアダプタ１０６とストレージインターフェイス１１１を経由して相互に接続されている。ファイバチャネルやＳＣＳＩなどのさまざまなインターフェイスを使用してストレージインターフェイス１１１を実装できる。ファイバチャネルまたはＳＣＳＩインターフェイスを使用してストレージインターフェイス１１１を実装する場合は、ホストバスアダプタ（ＨＢＡ：Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）をストレージアダプタ１０６として使用してもよい。ストレージシステム１０２は、外付けされ、前述のインターフェイスを経由してＮＡＳコントローラ１０１に接続できる。
【００１７】
ＮＡＳシステム１００は、ネットワークアダプタ１０５を経由してＮＡＳクライアント１１３に接続される。本発明を具体化するソフトウェアアプリケーションは、ＮＡＳシステム１００上でＮＡＳコントローラ１０１内に配置されたＣＰＵ１０３を使用して実行できる。
【００１８】
個々のＮＡＳクライアント１１３は、ＣＰＵ  １１４、メモリ１１５、ネットワークアダプタ１１６、ストレージアダプタ１１７、およびストレージシステム１１９を備えており、これらは内部バス１１８を経由して相互に接続される。個々のＮＡＳクライアント１１３は、ネットワークアダプタ１１６を経由してＮＡＳシステム１００に接続される。ストレージシステム１１９は、ＮＡＳシステム１００内のストレージシステム１０２と実質的に同じコンポーネントを使用して実装し、外付けで接続してもよい。
【００１９】
機能図
図３は、本発明による例示的なシステムの機能図を示している。ＮＡＳシステム１００内に配置されたＮＡＳコントローラ１０１には、ＮＦＳ／ＣＩＦＳサーバー２０１、ジャーナルマネージャ２０２、ローカルファイルシステム２０３、およびボリュームマネージャ２０４が含まれる。
【００２０】
ＮＦＳ／ＣＩＦＳサーバー２０１は、ローカルファイルシステム２０３で管理されるＮＦＳプロトコルとＣＩＦＳプロトコルを使用してファイルをエクスポートする（ファイルをアクセス可能にする）。また、ＮＦＳ／ＣＩＦＳサーバー２０１はＮＡＳクライアント１１３からの要求を解釈し、ローカルファイルシステム２０３に対して適切なファイルＩ／Ｏ要求を発行し、応答をＮＡＳクライアント１１３に返す。さらに、ＮＦＳ／ＣＩＦＳサーバー２０１はジャーナルマネージャ２０２の指示に従って要求をジャーナルボリューム２１１に格納する。さらに、ＮＦＳ／ＣＩＦＳサーバー２０１はジャーナルマネージャ２０２の指示に従ってジャーナルボリューム２１１に格納された要求を再実行する。
【００２１】
ローカルファイルシステム２０２はＮＦＳ／ＣＩＦＳサーバー２０２からファイルＩ／Ｏ要求を受信し、ボリュームマネージャ２０４に対して適切なブロックＩ／Ｏ要求を発行する。
【００２２】
ジャーナルマネージャ２０２は、ジャーナル管理テーブル２０６を使用してスナップショットとジャーナルエントリを管理する。また、ジャーナルマネージャ２０２は、ボリュームマネージャ２０４に対してボリュームのスナップショットを作成するように指示し、ＮＦＳ／ＣＩＦＳサーバー２０１に対してＮＡＳクライアント１１３から送信された要求をジャーナルに記録するように指示する。スナップショットとジャーナルからリストアする場合は、ジャーナルマネージャ２０２がボリュームマネージャ２０４に対してスナップショットを元のボリュームまたは別のボリュームにリストアするように指示し、ＮＦＳ／ＣＩＦＳサーバー２０１に対してジャーナルボリューム２１１に格納された要求を再実行するように指示する。
【００２３】
ボリュームマネージャ２０４は、ストレージシステム１０２内の１つまたは複数のディスクドライブ１１０を使用して、１つまたは複数のボリューム２０７を作成する。また、ジャーナルマネージャ２０２の指示に従ってボリュームのスナップショットも作成する。
【００２４】
個々のＮＡＳクライアント１１３には、ＮＦＳ／ＣＩＦＳクライアント２１３とリストアダイレクタ２２４が含まれる。
【００２５】
ＮＦＳ／ＣＩＦＳクライアント１１３は、ＮＡＳクライアント１１３上のユーザーまたはアプリケーションの指示に従い、ＮＦＳプロトコルとＣＩＦＳプロトコルを使用して適切なファイルＩ／Ｏ要求をＮＡＳシステム１００に送信する。
【００２６】
リストアダイレクタ２２４は、ＮＡＳクライアント１１３上のユーザーまたはアプリケーションの指示に従い、ＮＡＳシステム１００上のジャーナルマネージャ２０２にリストア要求を送信する。
【００２７】
スナップショットメカニズム
スナップショットは、ストレージボリューム内のデータの特定時点におけるコピー（イメージ）を作成するメカニズムである。スナップショットは、たとえばブロックレベル、ファイルシステムレベルなど、さまざまなレベルで実施できる。本発明の１つの実施形態では、ＮＡＳシステム１００はブロックレベルのスナップショットを使用する。前述のブロックレベルのスナップショットを実施する場合は、ボリューム内に格納されたデータのイメージは別のボリュームにコピーされる。このように、元のボリュームにファイルシステムを格納する場合は、ファイルシステム全体のデータイメージは別のボリュームにコピーされる。
【００２８】
また、前述のスナップショットメカニズムを実装するにはさまざまな方法がある。ミラーリングはその最も一般的な実装の１つである。ミラーリングの方法では、元のボリュームと同じサイズのスナップショットボリュームが作成され、スナップショットボリュームは元のボリュームに関連付けられる。スナップショットボリュームが元のボリュームに関連付けられると、元のボリュームに格納されたすべてのデータはスナップショットボリュームにコピーされる。最初のコピーが完了すると、元のボリュームに対して実行されるすべての書き込み入出力（Ｉ／Ｏ）操作はスナップショットボリュームに対しても実行される。特定時点におけるデータイメージを保存する必要がある場合は、前述のスナップショットボリュームへの書き込みＩ／Ｏの実行は打ち切られ、これによってスナップショットボリュームを元のボリュームから「切り離す（ｓｐｌｉｔｔｉｎｇ）」。
【００２９】
ローカルファイルシステムのデータ構造
ローカルファイルシステムは、個々のファイルサーバーまたはＮＡＳシステムでローカルファイルおよびディレクトリの管理に使用するファイルシステムである。ファイルサーバーまたはＮＡＳシステムは、それぞれ異なるローカルファイルシステムを使用できる。
【００３０】
図４は、ローカルファイルシステム２０３に関連付けられたデータをファイルシステムボリューム２０７に格納する方法を示している。ファイルシステムボリュームのブートセクタ３０１は、必要な場合はシステムを起動するように動作できる起動プログラムを格納するために提供される。ローカルファイルシステム２０３は、ブートセクタ３０１の内容を変更しない。ボリュームのその他の部分はローカルファイルシステム２０３で使用される。
【００３１】
ローカルファイルシステム２０３はボリュームのその他の部分をブロックグループ３０２に分割する。個々のブロックグループ３０２には、スーパーブロック３０３、ブロックグループ記述子３０４、データブロックビットマップ３０５、Ｉｎｏｄｅビットマップ３０６、Ｉｎｏｄｅテーブル３０７、およびデータブロック３０８が含まれる。
【００３２】
スーパーブロック３０３には、ブロックグループ３０２に関連付けられた場所情報を格納するために使用する。個々のブロックグループ３０２には、同じスーパーブロック３０３のコピーが格納される。ブロックグループ記述子３０４には、ブロックグループ３０２に関連付けられた管理情報を格納する。データブロックビットマップ３０５は、使用中のデータブロック３０８を識別する。同様に、Ｉｎｏｄｅビットマップ３０６はＩｎｏｄｅテーブル３０７内の使用中のＩｎｏｄｅ３０９を識別する。
【００３３】
Ｉｎｏｄｅテーブル３０７内のＩｎｏｄｅレコード３０９には、個々のファイルまたはディレクトリに関連付けられた以下の属性が格納される。
□  Ｉｎｏｄｅ  Ｎｕｍｂｅｒ（Ｉｎｏｄｅ番号）：Ｉｎｏｄｅを表す一意の番号
□  Ｆｉｌｅ  Ｔｙｐｅ（ファイルタイプ）：Ｉｎｏｄｅに関連付けられたデータストレージユニットの種類（ファイル、ディレクトリなど）
□  Ｆｉｌｅ  Ｓｉｚｅ（ファイルサイズ）：ファイルのサイズ
□  Ａｃｃｅｓｓ  ｐｅｒｍｉｓｓｉｏｎ（アクセス許可）：ユーザー（所有者）、グループなどのアクセス許可を表すビット列
□  Ｕｓｅｒ  ＩＤ（ユーザーＩＤ）：ファイルを所有するユーザーのＩＤ番号
□  Ｇｒｏｕｐ  ＩＤ（グループＩＤ）：ユーザー（所有者）が所属するグループのＩＤ番号
□  Ｃｒｅａｔｅ  Ｔｉｍｅ（作成日時）：ファイルが作成された日時
□  Ｌａｓｔ  Ｍｏｄｉｆｙ  Ｔｉｍｅ（最終更新日時）：ファイルが更新された日時
□  Ｌａｓｔ  Ａｃｃｅｓｓ  Ｔｉｍｅ（最終アクセス日時）：ファイルが最後にアクセスされた日時
□  Ｂｌｏｃｋ  Ｐｏｉｎｔｅｒ（ブロックポインタ）：実際のデータが格納されているデータブロックへのポインタ
【００３４】
図５は、Ｉｎｏｄｅ  ４０１、４０３、４０４、および４０７と、それぞれのデータブロック４０２、４０５、４０６、４０８、および４０９との論理的な関係を示している。個々のＩｎｏｄｅ  ４０１、４０３、４０４、および４０７を使用して、ファイルまたはディレクトリを表すことができる。Ｉｎｏｄｅがファイルを表す場合（４０４および４０７のようにＦｉｌｅ  Ｔｙｐｅフィールドの値が「ｆｉｌｅ」の場合）は、Ｉｎｏｄｅからポイントされるデータブロックにはこのファイルの実際のデータが格納されている。ファイルが複数のデータブロック４０６および４０９に格納される場合は、２つのデータブロック４０６と４０９のアドレスがＢｌｏｃｋ  Ｐｏｉｎｔｅｒフィールドに記録される。個々のブロックポインタは、ファイルシステムボリューム２０７内の論理ブロックアドレス（ＬＢＡ：ｌｏｇｉｃａｌ  ｂｌｏｃｋ  ａｄｄｒｅｓｓ）として表される。Ｉｎｏｄｅがディレクトリを表す場合は（４０１および４０３のようにＦｉｌｅ  Ｔｙｐｅフィールドの値が「ｄｉｒｅｃｔｏｒｙ」の場合）、Ｂｌｏｃｋ  ＰｏｉｎｔｅｒフィールドからポイントされるデータブロックにはＩｎｏｄｅに対応するディレクトリ内のすべてのファイルおよびディレクトリのＩｎｏｄｅの番号と名前のリストが格納される。
【００３５】
ファイルアクセスプロトコル
クライアントコンピュータ（図示された実施形態ではＮＡＳクライアント１１３）がＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ：ローカルエリアネットワーク、実施形態ではＬＡＮ  １２０）を経由してファイルサーバーまたはＮＡＳシステム（実施形態ではＮＡＳシステム１００）によって管理されるファイルシステムにアクセスできるようにするための複数のプロトコルが存在する。ＮＦＳｖ３（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ  ｖｅｒｓｉｏｎ  ３、ＩＥＴＦ  ＲＦＣ１８１３で定義）、ＮＦＳｖ４（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ  ｖｅｒｓｉｏｎ  ４、ＩＥＴＦ  ＲＦＣ３５３０で定義）、ＣＩＦＳ（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎで開発）は、広く使用されているファイルアクセスプロトコルの例である。本発明の実施形態について、本明細書の以下の部分では例としてＮＦＳ  ｖｅｒｓｉｏｎ  ３を使用して説明する。
【００３６】
ＮＦＳ操作
当業者には周知のＮＦＳ  ｖｅｒｓｉｏｎ  ３プロトコルを使用すると、ＮＡＳクライアント１１３はＮＡＳシステム１００によってエクスポートされたファイルまたはディレクトリに関して次の操作を要求できる。ＮＡＳクライアント１１３から受信した要求に応答して、ＮＡＳシステム１００は以下に示す手順を実行する。
【００３７】
ＮＵＬＬ要求を受信した場合、ＮＡＳシステム１００は操作を実行しない。
【００３８】
ＧＥＴＡＴＴＲ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイルの属性を読み出して返す。
【００３９】
ＳＥＴＡＴＴＲ要求を受信した場合、ＮＡＳシステム１００は対象となるファイルの属性を要求内で指定されたように変更する。
【００４０】
ＬＯＯＫＵＰ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイル名またはディレクトリ名を検索する。検出された場合は、対応するファイルハンドル（後述）をＮＡＳクライアント１１３に返す。
【００４１】
ＡＣＣＥＳＳ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイルまたはディレクトリのアクセス許可を確認する。
【００４２】
ＲＥＡＤＬＩＮＫ要求を受信した場合、ＮＡＳシステム１００はシンボリックリンク（他のファイルへのポインタをデータとして格納するファイル）のデータを読み出して返す。
【００４３】
ＲＥＡＤ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイルのデータを読み出して返す。
【００４４】
ＷＲＩＴＥ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたようにデータをファイルに書き込む。
【００４５】
ＣＲＥＡＴＥ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたように新しいファイルを作成する。
【００４６】
ＭＫＤＩＲ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたように新しいディレクトリを作成する。
【００４７】
ＳＹＭＬＩＮＫ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたように新しいシンボリックリンクを作成する。
【００４８】
ＭＫＮＯＤ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたように特殊なファイルを作成する。特殊なファイルは、名前付きパイプまたはデバイスファイルでよい。
【００４９】
ＲＥＭＯＶＥ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイルを削除する。
【００５０】
ＲＭＤＩＲ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたディレクトリを削除する。
【００５１】
ＲＥＮＡＭＥ要求を受信した場合、ＮＡＳシステム１００はファイルまたはディレクトリの名前を要求内で指定されたように変更する。
【００５２】
ＬＩＮＫ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたようにハードリンク（既存のファイルまたはディレクトリと同じデータをポイントするファイルまたはディレクトリ）を作成する。
【００５３】
ＲＥＡＤＤＩＲ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたディレクトリのデータを読み出して返す。ディレクトリのデータには、指定されたディレクトリ内のファイルとディレクトリの名前（通常はディレクトリエントリと呼ばれる）が含まれる。
【００５４】
ＲＥＡＤＤＩＲＰＬＵＳ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたディレクトリのデータを読み出して返す。各ディレクトリエントリのファイルハンドルも返す。
【００５５】
ＦＳＳＴＡＴ要求を受信した場合、ＮＡＳシステム１００はファイルシステムに関する動的な情報（全体のサイズ、空き容量など）を取得して返す。
【００５６】
ＦＳＩＮＦＯ要求を受信した場合、ＮＡＳシステム１００はファイルシステムの静的な情報（ＮＡＳシステム１００上で許可されるＲＥＡＤ要求、ＷＲＩＴＥ要求、１つのファイルのサイズの上限など）を取得して返す。
【００５７】
ＰＡＴＨＣＯＮＦ要求を受信した場合、ＮＡＳシステム１００は要求内で指定されたファイルまたはディレクトリの「ｐａｔｈｃｏｎｆ」情報を取得して返す。「Ｐａｔｈｃｏｎｆ」情報は、ＰＯＳＩＸ（Ｐｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ  ｆｏｒ  ＵＮＩＸ（登録商標））で定義されている。
【００５８】
ＣＯＭＭＩＴ要求を受信した場合、ＮＡＳシステム１００はキャッシュ（この実施形態ではメモリ１０４上にある）上のダーティー（ｄｉｒｔｙ）データ（まだ安定なストレージに書き込まれていないデータ）を安定なストレージ（この実施形態ではストレージシステム１０２）にフラッシュし、ＮＡＳシステム１００がキャッシングした後も書き込まれたデータが失われないようにする。
【００５９】
ファイルハンドル
ＮＡＳクライアント１１３がＮＡＳシステム１００に要求を発行する場合は、対象となるファイルまたはディレクトリをそのファイルハンドルで指定する。ファイルハンドルは、ＮＡＳシステム１００が個々のファイルおよびディレクトリに割り当てる６４バイトの文字列である。ＮＡＳシステム１００がＮＡＳクライアント１１３からＬＯＯＫＵＰ要求を受信した場合に、ＮＡＳシステム１００は個々のファイルまたはディレクトリのファイルハンドルを指定し、ＮＡＳシステム１００がファイルまたはディレクトリをそのファイルハンドルで識別できるようにする。当業者には周知であり、参照により本明細書に組み込まれているインターネット標準ＲＦＣ１８１３（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ（ＩＥＴＦ）によって採用された）は、ＮＡＳシステム１００が再起動してもファイルハンドルは変更すべきでないことが明記されている。ただし、ファイルハンドルを指定する方法はＲＦＣ１８１３では定義されておらず、本発明概念に必須ではない。ファイルハンドルを生成する厳密な方法は、個々のオペレーティングシステムまたはプラットフォームによって異なる。
【００６０】
１つの広く使用されている実施態様では、ファイルハンドルは以下の情報を使用して生成される。
●  Ｄｅｖｉｃｅ  Ｎｕｍｂｅｒ（デバイス番号）：ネットワークアダプタ、ストレージボリュームなど、システムで管理される個々のデバイスに割り当てられた一意の番号
●  Ｉｎｏｄｅ  Ｎｕｍｂｅｒ（Ｉｎｏｄｅ番号）：個々のＩｎｏｄｅを表す一意の番号（前述のように）
【００６１】
ファイルハンドル生成ソフトウェアモジュールは、デバイス番号とＩｎｏｄｅ番号を使用するので、ファイルまたはディレクトリが別のボリュームに移動またはコピーされる場合に、移動またはコピーされたファイルまたはディレクトリは元のファイルまたはディレクトリに関連付けられたファイルハンドルと同じファイルハンドルで表すことはできない。
【００６２】
ＮＦＳ要求
図６に示すように、個々のＮＦＳ要求には、ＲＰＣヘッダ５００、ＮＦＳヘッダ５０１、およびＮＦＳデータ５０２の３つのデータ要素が含まれており、これらについて以下に詳しく説明する。
【００６３】
ＲＰＣヘッダ５００
本発明の１つの実施形態では、ＲＰＣヘッダ５００には以下の情報が含まれる。
□  ＸＩＤ：要求を表す一意の番号。この番号はＮＡＳクライアント１１３上で指定される。
□  Ｒｅｐｌｙ  Ｆｌａｇ（応答フラグ）：このフィールドが０の場合は、ＲＰＣヘッダがＮＡＳシステム１００上のプロシージャ呼び出し用であることを意味する。１の場合は応答用である。
□  ＲＰＣ  Ｖｅｒｓｉｏｎ（ＲＰＣバージョン）：ＲＰＣプロトコルのバージョンを表す定数。通常、このフィールドには「２」がセットされる。
□  ＲＰＣ  Ｐｒｏｇｒａｍ  Ｎｕｍｂｅｒ（ＲＰＣプログラム番号）：このフィールドには定数「１００００３」がセットされ、要求はＮＦＳプロトコルに基づくことを示す。
□  ＲＰＣ  Ｐｒｏｇｒａｍ  Ｖｅｒｓｉｏｎ  Ｎｕｍｂｅｒ（ＲＰＣプログラムバージョン番号）：このフィールドには定数「３」がセットされ、要求はＮＦＳプロトコルのバージョン３に基づくことを示す。
□  ＲＰＣ  Ｐｒｏｃｅｄｕｒｅ  Ｎｕｍｂｅｒ（ＲＰＣプロシージャ番号）：このフィールドは要求が指定するプロシージャを表すために使用される。たとえば、このフィールドに７がセットされると、要求がＷＲＩＴＥプロシージャを呼び出すことを表す。
□  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ（認証情報）：このフィールドは使用する認証方法の種類を指定するために使用される。ＵＩＤ（ユーザーＩＤ）とＧＩＤ（グループＩＤ）もこのフィールドを含む。ＵＩＤとＧＩＤは、ＮＡＳシステム１００で使用され、要求元のユーザーが対象となるファイルまたはディレクトリ上でプロシージャを実行する権限があることを示す。
【００６４】
ＮＦＳヘッダ５０１
ＮＦＳヘッダ５０１の内容は、ＮＦＳ要求の種類によって異なる。たとえば、要求がＷＲＩＴＥ操作の場合は、この部分に以下の情報が含まれる。
□  Ｆｉｌｅ  Ｈａｎｄｌｅ（ファイルハンドル）：ＮＦＳデータ部のデータが書き込まれるファイルを表すファイルハンドル。ファイルハンドルは、通常はファイルおよびディレクトリの操作に関連する要求のＮＦＳヘッダ内に含まれる。ファイルハンドルを使用すると、ＮＡＳシステム１００は対象となるファイルおよびディレクトリを識別できる。
□  Ｏｆｆｓｅｔ（オフセット）：ファイル内で書き込みを開始する位置。
□  Ｃｏｕｎｔ（カウント）：書き込まれるデータのバイト数。
□  Ｓｔａｂｌｅ  Ｆｌａｇ（安定フラグ）：このフィールドには、ＮＡＳシステム１００が書き込まれたデータを処理する方法を指定する。たとえば、このフィールドに数値２が含まれると、ＮＡＳクライアント１１３へのＷＲＩＴＥ操作の結果を返す前に、ＮＡＳシステム１００はそのキャッシュ内のダーティーデータをストレージシステム１０２にフラッシュする必要がある。
【００６５】
ＮＦＳデータ５０２
ＮＦＳヘッダ５０１の内容と同様に、ＮＦＳデータ５０２の内容もＮＦＳ要求の種類によって異なる。たとえば、ＮＦＳ要求がＷＲＩＴＥ操作を含む場合は、ＮＦＳデータ部５０２にはストレージに書き込まれるデータが含まれる。ＬＯＯＫＵＰ、ＧＥＴＡＴＴＲなど、一部のＮＦＳ要求にはＮＦＳデータ部５０２が存在しない。
【００６６】
ジャーナルグループ
本発明概念の１つの実施形態により、ジャーナルグループ２１４が定義される（図１を参照）。具体的に言えば、ファイルシステムボリューム２０７はジャーナルグループ２１４として体系化される。ジャーナルグループ２１４はファイルシステムボリューム２０７の最小の単位であり、ここにはＮＡＳクライアント１１３からのＮＦＳ要求のジャーナルがローカルファイルシステム２０８に確実に記録される。関連のジャーナルには、ＮＡＳクライアント１１３からローカルファイルシステム２０８に送信された要求の順序が適切な順序で記録される。ジャーナル記録の操作によって生成されたジャーナルデータは、１つまたは複数のジャーナルボリューム２１１に格納できる。
【００６７】
ジャーナルの管理データ
図７は、ＮＦＳ要求のジャーナル記録を実行するときに使用するデータを示している。ＮＡＳシステム１００がＮＡＳクライアント１１３からの要求を受信すると、これに応答してジャーナルレコードが生成される。ジャーナルレコードには、ジャーナルヘッダ６０２とジャーナルデータ６０３が含まれる。ジャーナルヘッダ６０２には、対応するジャーナルデータ６０３に関する情報が含まれる。ジャーナルデータ部６０３には、本明細書で前述のように、ＲＰＣヘッダ５００、ＮＦＳヘッダ５０１、およびＮＦＳデータ５０２で構成されるＮＦＳ要求全体が組み込まれている。
【００６８】
図７に示すように、各ジャーナルヘッダ６０４には以下のフィールドが組み込まれている。
●  ＪＨ＿ＯＦＳ  ６０４：このフィールドは、ジャーナルグループ２１４内の特定のファイルシステムボリューム２０７を表す。ファイルシステムボリュームは第０のファイルシステムボリュームから始まり、第１のファイルシステムボリューム、第２のファイルシステムボリューム、以下同様に続く。ボリュームオフセットの値は、０、１、２、などである。ＪＨ＿ＯＦＳ  ６０４は、要求の対象となるジャーナルグループ２１４内の特定のファイルシステムボリューム２０７を表す。前述のオフセット値は、図８に示すＦＶＯＬ＿ＯＦＦＳレコード７２０に対応し、ＮＡＳクライアント１１３からの要求に応答してジャーナルエントリが作成されるときに指定される。
●  ＪＨ＿ＦＨ  ６０５：このフィールドは、要求の対象となる特定のファイルまたはディレクトリを表す。前述の対象となるファイルまたはディレクトリは、適切なファイルハンドルを使用して指定される。ファイルハンドルは、要求のＮＦＳヘッダ部５０１から取得できる。
●  ＪＨ＿ＬＥＮ  ６０６：このフィールドには、要求全体の長さの情報が指定される。
●  ＪＨ＿ＴＩＭＥ  ６０７：このフィールドは、ＮＡＳシステム１００で要求を受信した日時を表す。ＪＨ＿ＴＩＭＥ  ６０７フィールドには、要求の暦日、時間、分、秒、さらにミリ秒を指定できる。この日時は、ＮＡＳシステム１００とＮＡＳクライアント１１３のいずれかによって提供できる。
●  ＪＨ＿ＳＥＱ  ６０８：このフィールドは、個々の要求に割り当てられたシーケンス番号を表す。すべてのシーケンス番号は、指定されたジャーナルグループ２１４内で一意である。シーケンス番号は、ジャーナルエントリが作成されるときにそれに割り当てられる。
●  ＪＨ＿ＶＯＬ  ６０９：このフィールドは、ジャーナルデータ６０３に関連付けられたジャーナルボリューム２１１を表す。この識別子は、ジャーナルデータ６０３を格納するジャーナルボリューム２１１を表す。ジャーナルデータ６０３は、ジャーナルヘッダ６０２を格納するジャーナルボリューム２１１とは異なるジャーナルボリューム２１１に格納できる。
●  ＪＨ＿ＡＤＲ  ６１０：このフィールドには、ジャーナルデータ６０３を格納するように関連付けられたジャーナルボリューム２１１内でジャーナルデータ６０３の開始アドレスが指定される。
●  ＪＨ＿ＯＰ  ６１１：このフィールドには、要求のＲＰＣヘッダで指定されるＲＰＣプロシージャ番号が指定される。
●  ＪＨ＿ＵＩＤ  ６１２：このフィールドは、要求のＲＰＣヘッダで指定されるユーザー識別子（ＵＩＤ：ｕｓｅｒ  ｉｄｅｎｔｉｆｉｅｒ）を含む。
●  ＪＨ＿ＧＩＤ  ６１３：このフィールドは、要求のＲＰＣヘッダで指定されるグループ識別子（ＧＩＤ：ｇｒｏｕｐ  ｉｄｅｎｔｉｆｉｅｒ）を含む。
【００６９】
ＪＨ＿ＯＰ  ６１１、ＪＨ＿ＵＩＤ  ６１２、ＪＨ＿ＧＩＤ  ６１３などのフィールドは、必ずしもジャーナルヘッダ６０２に含まれてはいない。ただし、ユーザーが操作、ユーザー、グループに基づいてリカバリを要求した場合に、このようなフィールドはＮＡＳシステム１００が適切なリカバリポイントを迅速に検索するために有効である。
【００７０】
ジャーナルに記録する要求
ローカルファイルシステム２０８の任意の希望する時点におけるイメージをリカバリできるように、本発明概念の実施形態により、すべてのＮＦＳ要求がジャーナルに記録される。ただし、必要なジャーナルボリューム２１１容量を縮小するために、ジャーナルに記録されるＮＦＳ要求の数を減らすことができる。
【００７１】
１つの特定の実装では、ＮＵＬＬ、ＡＣＣＥＳＳ、ＦＳＩＮＦＯ、ＦＳＳＴＡＴ、ＰＡＴＨＣＯＮＦ、および同様の操作にはファイルシステムボリューム２０７内のいかなるデータの変更も含まれないため、このような操作を含む要求はジャーナルには格納されない。
【００７２】
１つの特定の実装では、ＳＥＴＡＴＴＲ、ＷＲＩＴＥ、ＣＲＥＡＴＥ、ＭＫＤＩＲ、ＳＹＭＬＩＮＫ、ＭＫＮＯＤ、ＲＥＭＯＶＥ、ＲＭＤＩＲ、ＲＥＮＡＭＥ、ＬＩＮＫ、ＣＯＭＭＩＴなど、ファイルおよびディレクトリに関連付けられたデータに変更を加える要求のみがジャーナルに記録される。ただし、この場合は、ＲＥＡＤ操作によってもファイルのアクセス日時が変更され、ＲＥＡＤＤＩＲ操作によってもディレクトリのアクセス日時が変更されるため、ユーザーがファイルアクセス日時を使用してローカルファイルシステム２０８のリカバリイメージを指定することはできない。
【００７３】
ジャーナル管理テーブル
図８は、ジャーナル管理テーブル２０６の詳細を示している。ジャーナルヘッダ領域６００とジャーナルデータ領域６０１を管理するために、前述の各領域へのポインタが必要である。本明細書の以上の部分で説明するように、ジャーナル管理テーブル２０６にはジャーナルグループ２１４に関連付けられた設定情報、およびジャーナルグループ２１４、関連のジャーナルボリューム２１１、およびスナップショットイメージ２０９間の関係に関する情報が保持される。
【００７４】
図８に示すジャーナル管理テーブル２０６は、例示的な管理テーブルとその内容を示している。図示されたジャーナル管理テーブル２０６には、以下の情報が格納される。
□  ＧＲＩＤ  ７００：このレコードは、特定のジャーナルグループ２１４を表す。グループＩＤは、ＮＡＳシステム１００の管理者がジャーナルグループ２１４を定義するときに、ＮＡＳシステム１００内のジャーナルマネージャ２０２によって割り当てられる。
□  ＧＲＮＡＭＥ  ７０１：このフィールドには、人間にわかりやすい識別子を使用するジャーナルグループ２１４を指定する。このグループ名は、ＮＡＳシステム１００の管理者が特定のジャーナルグループ２１４を定義するときに入力し、ジャーナルマネージャ２０２によって前述のフィールドに格納される。
□  ＧＲＡＴＴＲ  ７０２：このフィールドには、２つの属性、ＭＡＳＴＥＲとリストアが格納される。ＭＡＳＴＥＲ属性は、ジャーナルグループ２１４がジャーナル記録の対象となることを表す。リストア属性は、ジャーナルグループがジャーナルからリストアされることを表す。
□  ＧＲＳＴＳ  ７０３：このレコードを使用して、２つの相反する状態、すなわちＡＣＴＩＶＥとＩＮＡＣＴＩＶＥを表すことができる。
□  ＳＥＱ  ７０４：このレコードには、ジャーナルヘッダ６０２で使用するシーケンス番号のソースの役割を果たすカウンタが格納される。新しいジャーナルレコードを作成するときにＳＥＱレコード７０４の値が読み出され、新しいジャーナルレコードに割り当てられる。続いて、ＳＥＱレコード７０４の値が増分され、このフィールドにライトバックされる（ｗｒｉｔｔｅｎ  ｂａｃｋ）。
□  ＮＵＭ＿ＦＶＯＬ  ７０５：このレコードは、ジャーナルグループ２１４に含まれるファイルシステムボリューム２０７の数を表す。
□  ＦＶＯＬ＿ＬＩＳＴ  ７０６：このフィールドは、ジャーナルグループ２１４内のファイルシステムボリューム２０７のリストを表す。本発明概念の実施形態では、図８に示すように、ＦＶＯＬ＿ＬＩＳＴ  ７０６はファイルシステムボリューム情報を格納するデータ構造の第１のエントリへのポインタである。個々のファイルシステムボリューム情報レコードは、ＦＶＯＬ＿ＯＦＦＳ  ７２０、ＦＶＯＬ＿ＩＤ  ７２１、ＦＶＯＬ＿ＮＥＸＴ  ７２２で構成される。
□  ＦＶＯＬ＿ＯＦＦＳ  ７２０：このフィールドは、ジャーナルグループ２１４内の特定のファイルシステムボリューム２０７のオフセット値を表す。たとえば、ジャーナルグループ２１４が３つのファイルシステムボリューム２０７で構成される場合は、オフセット値として０、１、２を指定できる。オフセット値は、ＮＡＳシステム１００の管理者がジャーナルグループ２１４にファイルシステムボリューム２０７を追加するときに、ジャーナルマネージャ２０２によって個々のファイルシステムボリューム２０７に割り当てられる。
□  ＦＶＯＬ＿ＩＤ  ７２１：このフィールドは、ＮＡＳシステム１００全域にあるファイルシステムボリューム２０７を一意に識別する。また、ＮＡＳシステム１００のユーザーまたは管理者が新しいファイルシステムボリューム２０７を追加するときにも、ファイルシステムボリューム２０７として追加するボリュームを、このボリューム識別子を使用して指定する。識別子ＪＶＯＬ＿ＩＤとＳＶＯＬ＿ＩＤが同じ原理に基づいていることにも留意されたい。
□  ＦＶＯＬ＿ＮＥＸＴ  ７２２：このフィールドには、ジャーナルグループ２１４内の次のファイルシステムボリューム２０７の情報を格納するデータ構造へのポインタが入る。次のボリュームがない場合は、このフィールドの値はＮＵＬＬである。
□  ＮＵＭ＿ＪＶＯＬ  ７０７：このレコードは、ジャーナルヘッダ６０２とジャーナルデータ６０３を格納するための、ジャーナルグループ２１４に関連付けられたジャーナルボリューム２１１の数を表す。
□  ＪＩ＿ＨＥＡＤ＿ＶＯＬ  ７０８：このレコードは、次の新しいジャーナルヘッダ６０２を格納するジャーナルヘッダ領域６００を含むジャーナルボリューム２１１を表す。
□  ＪＩ＿ＨＥＡＤ＿ＡＤＲ  ７０９：このレコードは、ジャーナルボリューム２１１内で次のジャーナルヘッダ６０２が格納される場所のアドレスを表す。
□  ＪＯ＿ＨＥＡＤ＿ＶＯＬ  ７１０：このフィールドは、最も古いジャーナルヘッダ６０２を格納するジャーナルヘッダ領域６００を含むジャーナルボリューム２１１を表す。
□  ＪＯ＿ＨＥＡＤ＿ＡＤＲ  ７１１：このフィールドは、最も古いジャーナルヘッダ６０２を格納するジャーナルヘッダ領域６００内のジャーナルヘッダ６０２の場所のアドレスを表す。
□  ＪＩ＿ＤＡＴＡ＿ＶＯＬ  ７１２：このフィールドは、次のジャーナルデータ６０３が書き込まれるジャーナルデータ領域６０１を表す。
□  ＪＩ＿ＤＡＴＡ＿ＡＤＲ  ７１３：このフィールドは、次のジャーナルデータ６０３が格納されるジャーナルデータ領域６０１内の特定のアドレスを表す。
□  ＪＯ＿ＤＡＴＡ＿ＶＯＬ  ７１４：このフィールドは、最も古いジャーナルデータ６０３のデータを含むジャーナルデータ領域６０１を格納するジャーナルボリューム２１１を表す。
□  ＪＯ＿ＤＡＴＡ  ＡＤＲ  ７１５：このフィールドは、ジャーナルデータ領域６０１内で最も古いジャーナルデータ６０３を格納する場所のアドレスを表す。
□  ＪＶＯＬ＿ＬＩＳＴ  ７１６：このフィールドは、特定のジャーナルグループ２１４に関連付けられたジャーナルボリューム２１１のリストが格納される。本発明の実施形態では、ＪＶＯＬ＿ＬＩＳＴ  ７１６はジャーナルボリューム２１１に関する情報を格納するデータ構造へのポインタである。図８に示すように、個々のデータ構造は、ＪＶＯＬ＿ＯＦＦＳ  ７２３、ＪＶＯＬ＿ＩＤ  ７２４、ＪＶＯＬ＿ＮＥＸＴ  ７２５で構成される。
□  ＪＶＯＬ＿ＯＦＳ：このレコードは、指定されたジャーナルグループ２１４内の特定のジャーナルボリューム２１１に関連付けられたオフセット値を表す。たとえば、ジャーナルグループ２１４が２つのジャーナルボリューム２１１に関連付けられている場合は、オフセット値として０と１を使用してジャーナルボリュームを指定できる。
□  ＪＶＯＬ＿ＩＤ：このフィールドは、ＮＡＳシステム１００内のジャーナルボリューム２１１を一意に識別する。識別子ＦＶＯＬ＿ＩＤとＳＶＯＬ＿ＩＤは同じ原理に基づいていることにも留意されたい。
□  ＪＶＯＬ＿ＮＥＸＴ：このフィールドは、ジャーナルグループ２１４に関連付けられた次のジャーナルボリューム２１１に属する次のデータ構造エントリへのポインタを表す。次のエントリがない場合は、このフィールドの値がＮＵＬＬになる。
□  ＳＳ＿ＬＩＳＴ  ７１７：このフィールドは、指定されたジャーナルグループ２１４に関連付けられたスナップショットイメージ２１０のリストを表す。この特定の実装では、図８に示すように、ＳＳ＿ＬＩＳＴ  ７１７はスナップショット情報データ構造へのポインタである。個々のスナップショット情報データ構造には、以下の情報が含まれる。
□  ＳＳ＿ＳＥＱ  ７２６：このフィールドは、スナップショットが作成されたときにスナップショットに割り当てられたシーケンス番号を表す。
□  ＳＳ＿ＴＩＭＥ  ７２７：このフィールドには、スナップショットが作成された日時の情報が格納される。
□  ＳＳ＿ＳＴＳ  ７２８：このフィールドには、各スナップショットに関連付けられたステータス情報が格納される。有効な値にはＶＡＬＩＤとＩＮＶＡＬＩＤがある。
□  ＳＳ＿ＮＥＸＴ  ７２９：このフィールドには、次のスナップショット情報データ構造へのポインタが格納される。次のスナップショットがない場合は、このフィールドの値はＮＵＬＬである。個々のスナップショット情報データ構造には、スナップショットイメージ２１０を格納するスナップショットボリュームのリスト（ＳＶＯＬ＿ＬＩＳＴ）７３０も含まれる。図８に示すように、スナップショットボリューム情報データ構造へのポインタ（ＳＶＯＬ＿ＬＩＳＴ）７３０は、個々のスナップショット情報データ構造に格納される。個々のスナップショットボリューム情報データ構造には、以下のレコードが含まれる。
□  ＳＶＯＬ＿ＯＦＦＳ  ７３１：このレコードは、スナップショットイメージ２１０の少なくとも一部を含むスナップショットボリューム２０９を識別するオフセット値を表す。スナップショットイメージ２１０は、セグメントまたはパーティションに分割され、複数のスナップショットボリューム２０９に格納される。本明細書で説明する本発明の１つの実施形態では、前述のオフセット値はスナップショットイメージ２１０の一部（セグメント、パーティションなど）を格納するｉ番目のスナップショットボリューム２０９を識別する。
□  ＳＶＯＬ＿ＩＤ  ７３２：このフィールドは、ＮＡＳシステム１００内のスナップショットボリューム２０９を一意に識別する。識別子ＦＶＯＬ＿ＩＤとＪＶＯＬ＿ＩＤも同じ原理に基づいていることに留意されたい。
□  ＳＶＯＬ＿ＮＥＸＴ  ７３３：このレコードは、特定のスナップショットイメージを格納する次のスナップショットボリューム情報データ構造へのポインタを表す。次のスナップショットボリューム情報データ構造がない場合は、このフィールドにはＮＵＬＬ値が入る。
【００７５】
ジャーナルエントリとスナップショットとの関係
図９は、ジャーナルエントリとスナップショットとの関係を示している。スナップショット８０１は、ジャーナルグループ２１４に属するファイルシステムボリューム２０７の第１のスナップショットイメージを表す。シーケンス番号がＳＥＱ０とＳＥＱ１のジャーナルエントリ８００が作成されていることに留意されたい。この２つのエントリは、２つの要求に対応するジャーナルエントリを表す。２つのエントリの内容は、スナップショット作成より前の特定の時点でジャーナル記録が開始されたことを示している。このように、シーケンス番号ＳＥＱ２に対応する時点で、ジャーナルマネージャ２０２はスナップショットの作成を開始し、ジャーナル記録はその前に開始されているので、スナップショットの作成中に要求が発生すればジャーナルに記録される。したがって、シーケンス番号ＳＥＱ３以上に関連付けられた要求８０２は、こうした要求がジャーナルに記録されていることを示す。本明細書では、シーケンス番号ＳＥＱ０とＳＥＱ１で識別されるジャーナルエントリは廃棄または無視できることに留意されたい。
【００７６】
ＮＡＳシステムへのデータリストア命令
ＮＡＳクライアント１１３上のユーザーまたは実行中のアプリケーションがリストアダイレクタ２２４に対して特定のジャーナルグループ２１４のリストアを指示する場合に、ユーザーまたはアプリケーションは最後に実行された操作を指定することによって希望する状態のデータが存在する日時を指定し、これによってリストアポイントを指定できる。リストアダイレクタ２２４がＮＡＳシステム１１３にリストア要求を送信するときに、リストアポイントを指定する基準に加えて、対象となるジャーナルグループのＩＤまたは名前の少なくともいずれかをＮＡＳシステム１１３に提供する。
【００７７】
ＮＡＳシステム１１３がリストア要求を受信すると、リストア要求内で指定された基準を使用してスナップショットとジャーナルエントリを検索し、該当するレコードが検出された場合は、それを使用してデータのイメージをリストアする。
【００７８】
たとえば、ＮＡＳクライアント１１３上のユーザーまたは実行中のアプリケーションが図１０に示すリストア時点８０３を指定した場合は、ＮＡＳシステム１１３は時点８０３より前の最新のスナップショットをリストアし、スナップショットから時点８０３までの間に実行された要求を再実行する。
【００７９】
ＮＡＳクライアント１１３上のユーザーまたは実行中のアプリケーションが要求８０４を指定した場合は、ＮＡＳシステム１１３は要求８０４より前の最新のスナップショットをリストアし、スナップショットから指定された要求８０４までの間に実行された要求を再実行する。
【００８０】
スナップショットとジャーナルからのリストア
データをリストアするには、通常、特定時点におけるローカルファイルシステム２０２のデータイメージを元のファイルシステムボリューム２０７または他の異なるボリュームにリカバリする必要がある。一般に、これは１つまたは複数のジャーナルエントリをそのジャーナルエントリより前に作成されたスナップショットに適用することによって実現される。ジャーナルレコードを適用するステップには、１つまたは複数のジャーナルエントリに従ってスナップショットの一部を更新または上書きするステップが含まれる。
【００８１】
本発明の１つの特定の実施形態では、ＳＥＱレコード７０４の値は要求が実行されるたびに増分され、ジャーナルエントリまたはスナップショットに割り当てられる。したがって、選択されたスナップショットに適用できるジャーナルエントリは、前述のＳＥＱの値を使用して容易に識別できる。具体的には、該当するジャーナルエントリには、選択されたスナップショットに関連付けられたシーケンス番号（ＳＳ＿ＳＥＱ）７２６より大きなシーケンス番号（ＪＨ＿ＳＥＱ）６０８が関連付けられている。
【００８２】
たとえば、ユーザーまたはアプリケーションはリストアダイレクタ２２４を使用してＮＡＳシステム１００に特定の時点を指定してもよい。推測されるように、この指定された時点はファイルシステムボリューム２０７内のデータが失われたときまたは壊れたときより前である。このように、目的の時点よりも前の時点が見つかるまで個々のスナップショットに対応する時間のフィールドＳＳ＿ＴＩＭＥ  ７２７が検索される。次に、ジャーナルヘッダ領域６００内のジャーナルヘッダ６０２の検索が「最も古い」ジャーナルヘッダ６０２から開始される。最も古いジャーナルヘッダは、ジャーナル管理テーブル２０６内の前述の「ＪＯ＿」で始まるレコード７１０、７１１、７１４、７１５によって識別できる。ジャーナルヘッダ６０２は領域６００内で順番に検索され、選択されたスナップショットに関連付けられたシーケンス番号ＳＳ＿ＳＥＱ７２６より大きいシーケンス番号ＪＨ＿ＳＥＱ  ６０８を有する最初のヘッダが検出される。選択されたスナップショットは、各ジャーナルエントリを１度に１つずつ順番にスナップショットに適用すること、したがって一連の要求を再実行することによって更新される。前述のジャーナルエントリを適用することは、スナップショットがスナップショットボリューム２０９に格納されているローカルファイルシステム２０８を対象とするジャーナルエントリで表される要求を再実行することと同等である。
【００８３】
このステップは、時間フィールドＪＨ＿ＴＩＭＥ  ６０７の値が目的の時点より前のジャーナルエントリがある限り続く。更新プロセスは、時間フィールドの値６０７が目的の時点より後の最初のジャーナルエントリで終了する。イメージを元のファイルシステムボリューム２０７にリストアする場合は、まず、スナップショットボリューム２０９内のデータのイメージをファイルシステムボリューム２０７にコピーする。次に、ジャーナルに記録された要求（元のローカルファイルシステム２０８に送信された要求）は、元のファイルシステムボリューム２０７に対して再実行される。
【００８４】
本発明概念の実施形態の１つの態様により、１つのスナップショットが作成される。次に、そのスナップショットより後のすべてのジャーナルエントリを、前述のスナップショットに適用することで、指定された任意の時点でのデータの状態を再現できる。本発明概念の実施形態の別の態様により、複数のスナップショット８０１'が作成される。作成された個々のスナップショットとジャーナルレエントリには、オブジェクト（スナップショットまたはジャーナルエントリ）が記録された順序でシーケンス番号が割り当てられる。通常は、個々のスナップショット８０１'同士の間には多くのジャーナルエントリ８００が存在しており、複数のスナップショットを作成することでより短いリカバリ時間でデータをリストアできる。まず、リカバリの対象となる時点に最も近い時点のスナップショットが選択される。次に、そのスナップショットより後に作成されたジャーナルエントリを適用することにより、希望する時点のデータの状態をリストアできる。
【００８５】
元のボリュームにリストアする場合
ファイルシステムイメージを元のファイルシステムボリューム２０７にリストアする場合は、Ｉｎｏｄｅ番号とデバイス番号は変わらないので、リストアされたファイルシステムイメージに対してジャーナルで指定された元のファイルハンドルが有効である。したがって、元のファイルシステムボリューム２０７へのリストアは、単にスナップショットボリューム２０９内のスナップショットイメージを元のファイルシステムボリューム２０７にコピーし、次にジャーナルに記録された要求を再実行することによって実行される。
【００８６】
ジャーナルの作成
図１１は、ジャーナル記録操作を開始する例示的なプロセスの流れ図を示している。前述の例示的なプロセスの個々のステップについては、本明細書の以下の部分で詳細に説明する。
●  ステップ９００：管理者は、ジャーナルグループ２１４の名前、対象となるファイルシステムボリューム２０７、およびジャーナルグループ２１４に関連して使用するジャーナルボリューム２１１を指定する。
●  ステップ９０１：ＮＡＳシステム１００はジャーナル管理テーブル２０６を作成する。
●  ステップ９０２：ＮＡＳシステム１００はジャーナルグループ２１４に関するジャーナルの作成を開始する。
●  ステップ９０３：ＮＡＳシステム１００はジャーナルエントリを作成し、こうしたジャーナルエントリのそれぞれに対してシーケンス番号を割り当てる。
●  ステップ９０４：ＮＡＳシステム１００がジャーナルグループ２１４のスナップショットを作成するときに、このスナップショットにシーケンス番号も割り当てる。
【００８７】
ジャーナルの確認
図１６は、ジャーナルの容量を確認するプロセスの例示的な実施形態を示す流れ図である。このプロセスを使用して、ジャーナルマネージャ２０２は定期的にジャーナルエントリの数を減らし、ジャーナルボリューム内の記憶領域を解放する。
●  ステップ１０００：ＮＡＳシステム１００は、ジャーナルボリュームの空き領域が事前に指定した容量より小さいかどうかを確認する。小さい場合、プロセスはステップ１００１に進む。それ以外の場合は、プロセスが終了する。
●  ステップ１００１：ＮＡＳシステム１００は、最も古いジャーナルレコードのシーケンス番号よりシーケンス番号が大きいスナップショットがあるかどうかを確認する。ある場合、プロセスはステップ１００２に進む。それ以外の場合、プロセスはステップ１００３に進む。
●  ステップ１００２：ＮＡＳシステム１００は、ステップ１００１で検出されたスナップショットのシーケンス番号よりシーケンス番号が早いジャーナルエントリを削除する。削除されたエントリは、データイメージのリストアには使用しないので不要である。
●  ステップ１００３：ＮＡＳシステム１００は、ローカルファイルシステム２１０のスナップショットに最も古いジャーナルエントリを適用する。
●  ステップ１００４：ＮＡＳシステム１００は、ジャーナルボリュームの空き領域が事前に指定した容量を超えているかどうかを確認する。超えている場合は、プロセスが終了する。それ以外の場合、プロセスはステップ１００１に戻る。
【００８８】
この例では、ジャーナルボリュームの残りの容量が事前に指定した容量を下回る場合に、ジャーナルマネージャ２０２がジャーナルエントリを適用して削除する。別の実施形態では、システムが事前に指定した日時より前に作成されたジャーナルエントリを適用して削除し、ジャーナルのサイズを縮小する。
【００８９】
リストアの手順
図１２は、ＮＡＳクライアント１１３上のユーザーまたは実行中のアプリケーションがＮＡＳシステム１００に接続されたリストアダイレクタ２２４を使用してリカバリ時点を指定した場合に、スナップショットとジャーナルを使用してデータをリストアするプロセスを示す流れ図である。
●  ステップ１１００：ＮＡＳシステム１００は指定された時点より前の最新のスナップショットをリストアする。
●  ステップ１１０１：ＮＡＳシステム１００はステップ１１００でリストアされたスナップショットの日時から指定された時点までのジャーナル要求を古いものから順に再実行する。
【００９０】
イメージの別のボリュームへのリストア
ファイルシステムイメージを元のファイルシステムボリューム２０７とは異なるボリュームにリストアする場合は、対象となるリストアボリュームのデバイス番号は元のボリュームのデバイス番号と同じではないので、ジャーナル内で指定されたファイルハンドルはリストアされたファイルシステムイメージに対して有効ではない。したがって、別のボリュームへのリストアは、ファイルハンドルとパスとのマッピング情報を保持することによって実現される。一般的なＮＦＳサーバーは、このようなマッピング情報をデータベース内に保持している。しかし、いったんファイルハンドルが無効になると、ファイルハンドルのマッピング情報はデータベースから削除される。したがって、ＮＡＳシステム１００はマッピング情報を独自に記録する必要がある。
【００９１】
ファイルハンドルとパスとのマッピング
図１３は、ファイルハンドル１２０１とパス１２０２とのマッピング情報１２００の例を示している。
【００９２】
ファイルハンドルとパスとのマッピング情報の作成
図１４は、ファイルハンドルとパスとのマッピング情報を作成するプロセスの例示的な実施形態を示す流れ図である。このプロセスは、図１１に示すプロセスのステップ９０３で実行される。
●  ステップ１３００：ＮＡＳシステム１００は、新しい要求に対応する新しいジャーナルエントリを作成するときに、要求からファイルハンドルを取得する。
●  ステップ１３０１：ＮＡＳシステム１００は、マッピングテーブル１２００内にすでにこのファイルハンドルのエントリがあるかどうかを確認する。エントリがある場合は、プロセスがステップ１３０３に進む。それ以外の場合はステップ１３０２に進む。
●  ステップ１３０２：ＮＡＳシステム１００は、ＮＡＳシステム１００が管理するデータベースからファイルハンドルに対応するパスを取得する。
●  ステップ１３０３：ＮＡＳシステム１００はジャーナルエントリにシーケンス番号を割り当てる。
●  ステップ１３０４：ＮＡＳシステム１００は、要求に対応する新しいジャーナルエントリを格納する。
【００９３】
リストア
図１５は、データイメージを別のボリュームにリストアする場合にジャーナルエントリを再実行するための例示的な手順を示す流れ図である。このプロセスは、図１２に示すプロセスのステップ１１０１で実行される。
●  ステップ１４００：ＮＡＳシステム１００は、再実行するジャーナルからファイルハンドルを取得する。
●  ステップ１４０１：ＮＡＳシステム１００は、ファイルハンドルに対応するパスをマッピングテーブル１２００から取得する。
●  ステップ１４０２：ＮＡＳシステム１００は、リストアされたファイルシステムイメージ内のパスを検索し、パスに対応するファイルハンドルを取得する。
●  ステップ１４０３：ＮＡＳシステム１００は、取得したファイルハンドルを使用して要求を再実行する。
【００９４】
図１７は、本発明の方法の実施形態を実装できるコンピュータ／サーバーシステム１７００の実施形態を示すブロック図である。システム１７００には、コンピュータ／サーバープラットフォーム１７０１、周辺機器１７０２、ネットワークリソース１７０３が含まれる。
【００９５】
コンピュータプラットフォーム１７０１には、コンピュータプラットフォーム１７０１のさまざまな要素間で情報を伝達するためのデータバス１７０４またはその他の通信メカニズム、情報を処理し、その他の計算タスクや管理タスクを実行するための、バス１７０１に接続されたプロセッサ１７０５が含まれていてもよい。コンピュータプラットフォーム１７０１には、さまざまな情報とプロセッサ１７０５が実行する命令を格納するための、バス１７０４に接続されたランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）またはその他の動的記憶装置などの揮発性ストレージ１７０６も含まれる。揮発性ストレージ１７０６は、プロセッサ１７０５が命令を実行する間に使用する一時変数またはその他の中間的な情報を格納するために利用できる。コンピュータプラットフォーム１７０１には、さらに基本入出力システム（ＢＩＯＳ：ｂａｓｉｃ  ｉｎｐｕｔ−ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）やさまざまなシステム設定パラメータなど、静的な情報とプロセッサ１７０５が実行する命令を格納するための、バス１７０４に接続された読み取り専用のメモリ（ＲＯＭまたはＥＰＲＯＭ）１７０７またはその他の静的記憶装置が含まれていてもよい。情報や命令を格納するためのバス１７０１に接続された磁気ディスク、光ディスク、ソリッドステートフラッシュメモリ素子などの固定記憶装置１７０８も提供されている。
【００９６】
コンピュータプラットフォーム１７０１は、コンピュータプラットフォーム１７０１のシステム管理者またはユーザーに対して情報を表示するための陰極線管（ＣＲＴ：ｃａｔｈｏｄｅ  ｒａｙ  ｔｕｂｅ）、プラズマディスプレイ、または液晶ディスプレイ（ＬＣＤ：ｌｉｑｕｉｄ  ｃｒｙｓｔａｌ  ｄｉｓｐｌａｙ）などのディスプレイ１７０９にバス１７０４を経由して接続されてもよい。情報およびコマンドの選択をプロセッサ１７０５に伝えるための英数字またはその他のキーを含む入力装置１７１０がバス１７０１に接続されている。別のタイプのユーザー入力装置として、方向情報やコマンド選択をプロセッサ１７０４に伝えるため、およびディスプレイ１７０９上のカーソルの動きを制御するためのマウス、トラックボール、カーソル方向キー（ｃｕｒｓｏｒ  ｄｉｒｅｃｔｉｏｎ  ｋｅｙｓ）などのカーソル制御装置１７１１がある。この入力装置は、一般的に２本の軸、すなわち第１の軸（たとえばｘ）と第２の軸（たとえばｙ）上の２つの自由度を備えており、入力装置はこれを使用して平面内の位置を指定できる。
【００９７】
外付けのストレージデバイス１７１２は、バス１７０４を経由してコンピュータプラットフォーム１７０１に接続され、コンピュータプラットフォーム１７０１に追加の、または取り外し可能なストレージ容量を提供してもよい。コンピュータシステム１７００の実施形態では、外付けの取り外し可能な記憶装置１７１２を使用して、他のコンピュータシステムとの間でデータを容易に交換してもよい。
【００９８】
本発明は、本明細書で説明する技術を実装するためのコンピュータシステム１７００の使い方に関連する。１つの実施形態では、本発明のシステムはコンピュータプラットフォーム１７０１などのマシン上に常駐してもよい。本発明の１つの実施形態により、本明細書で説明する技術は、揮発性メモリ１７０６に格納された１つまたは複数の命令シーケンスをプロセッサ１７０５が実行するのを受けて、コンピュータシステム１７００によって実行される。こうした命令は、固定記憶装置１７０８などの別のコンピュータ可読媒体から揮発性メモリ１７０６に読み込まれてもよい。揮発性メモリ１７０６に格納された命令シーケンスを実行する結果として、プロセッサ１７０５は本明細書で説明するプロセスのステップを実行する。代わりの実施形態では、ソフトウェア命令の代わりに配線回路を使用して、あるいはソフトウェア命令と配線回路を組み合わせて本発明を実装してもよい。このように、本発明の実施形態は特定のハードウェア回路およびソフトウェアの組合せに限定はされない。
【００９９】
「コンピュータ可読媒体」という用語は、本明細書で使用する限り、実行する命令をプロセッサ１７０５に提供するステップに関与する任意の媒体を表す。コンピュータ可読媒体は、本明細書で説明する方法および／または技術のいずれかを実装するための命令を搬送できるマシン可読媒体の１つの例にすぎない。こうした媒体は、不揮発性媒体、揮発性媒体、および送信媒体を含むがこれに限定はされない多くの形をとることができる。不揮発性媒体には、たとえば、記憶装置１７０８などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体には、揮発性ストレージ１７０６などの動的メモリが含まれる。送信媒体には、データバス１７０４を備える配線を含む同軸ケーブル、銅線、および光ファイバが含まれる。送信媒体は、無線や赤外線のデータ通信で生成されるような音波または光波の形をとることもできる。
【０１００】
一般的な形のコンピュータ可読媒体には、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または他の任意の磁気媒体、ＣＤ−ＲＯＭ、または他の任意の光媒体、パンチカード、紙テープ、他の任意のせん孔パターンを使用した物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、フラッシュドライブ、メモリカード、他の任意のメモリチップまたはカートリッジ、本明細書の以下の部分で説明する搬送波、またはコンピュータ可読の他の任意の媒体が含まれる。
【０１０１】
さまざまな形のコンピュータ可読媒体は、１つまたは複数の命令シーケンスを実行するプロセッサに搬送するステップに関与してもよい。たとえば、まず磁気ディスクからリモートコンピュータに命令を搬送してもよい。代替的に、リモートコンピュータはその動的メモリにモデムを使用して電話回線経由で命令をロードし、送信してもよい。コンピュータシステム１７００のローカルモデムは、電話回線上のデータを受信し、赤外線送信機を使用してデータを赤外線信号に変換することができる。赤外線探知器は、赤外線信号として搬送されたデータを受信でき、適切な回路によってデータをデータバス１７０４上に配置できる。バス１７０４は、データを揮発性ストレージ１７０６に搬送し、ここからプロセッサ１７０５が命令を取得して実行する。揮発性メモリ１７０６で受信した命令は、プロセッサ１７０５で実行される前または後に、任意選択で固定記憶装置１７０８に格納してもよい。命令は、当業者に周知のさまざまなネットワークデータ通信プロトコルを使用してインターネット経由でコンピュータプラットフォーム１７０１にダウンロードしてもよい。
【０１０２】
コンピュータプラットフォーム１７０１には、データバス１７０４に接続されたネットワークインターフェイスカード１７１３などの通信インターフェイスも含まれる。通信インターフェイス１７１３は、ローカルネットワーク１７１５に接続されたネットワークリンク１７１４に接続する双方向のデータ通信を提供する。たとえば、通信インターフェイス１７１３は、対応するタイプの電話回線へのデータ通信接続を提供するＩＳＤＮ（ｉｎｔｅｇｒａｔｅｄ  ｓｅｒｖｉｃｅｓ  ｄｉｇｉｔａｌ  ｎｅｔｗｏｒｋ）カードまたはモデムでもよい。別の例として、通信インターフェイス１７１３は、互換性のあるＬＡＮへのデータ通信接続を提供するＬＡＮ  ＮＩＣ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ：ローカルエリアネットワークインターフェイスカード）でもよい。よく知られている８０２．１１ａ、８０２．１１ｂ、８０２．１１ｇ、およびＢｌｕｅｔｏｏｔｈなどの無線リンクを使用してネットワークを実装してもよい。こうした任意の実装において、通信インターフェイス１７１３はさまざまな情報を表すデジタルデータストリームを搬送する電気信号、電磁気信号、または光信号を送信および受信する。
【０１０３】
ネットワークリンク１７１３は、通常は１つまたは複数のネットワークを経由した他のネットワークリソースへのデータ通信を提供する。たとえば、ネットワークリンク１７１４は、ローカルネットワーク１７１５を経由してホストコンピュータ１７１６またはネットワークストレージ／サーバー１７２２への接続を提供できる。付加的または代替的に、ネットワークリンク１７１３は、ゲートウェイ／ファイアウォール１７１７を経由してワイドエリアネットワーク（ＷＡＮ：ｗｉｄｅ−ａｒｅａ  ｎｅｔｗｏｒｋ）またはグローバルネットワーク１７１８（インターネットなど）に接続してもよい。このように、コンピュータプラットフォーム１７０１は、インターネット１７１８上の任意の場所にあるネットワークリソース（リモートネットワークストレージ／サーバー１７１９など）にアクセスできる。一方で、コンピュータプラットフォーム１７０１はローカルエリアネットワーク１７１５（ＬＡＮ）および／またはインターネット１７１８上の任意の場所にあるクライアントからもアクセスできる。ネットワーククライアント１７２０および１７２１は、それ自体プラットフォーム１７０１と同様のコンピュータプラットフォームに基づいて実装してもよい。
【０１０４】
ローカルネットワーク１７１５とインターネット１７１８は、いずれもデジタルデータストリームを搬送する電気信号、電磁気信号、または光信号を使用する。コンピュータプラットフォーム１７０１との間のデジタルデータを搬送するさまざまなネットワークを経由する信号およびネットワークリンク１７１４上の通信インターフェイス１７１３を経由する信号は、情報を送信する搬送波の例示的な形である。
【０１０５】
コンピュータプラットフォーム１７０１は、インターネット１７１８やＬＡＮ  １７１５を含むさまざまなネットワーク（１つまたは複数）、ネットワークリンク１７１４、および通信インターフェイス１７１３を経由してプログラムコードを含むメッセージやデータを送信および受信できる。インターネットの例では、システム１７０１がネットワークサーバーとして機能する場合に、クライアント１７２０および／または１７２１上で動作するアプリケーションプログラムに必要なコードまたはデータをインターネット１７１８、ゲートウェイ／ファイアウォール１７１７、ローカルエリアネットワーク（ＬＡＮ）１７１５、および通信インターフェイス１７１３を経由して送信してもよい。同様にして、他のネットワークリソースからコードを受信してもよい。
【０１０６】
受信したコードはプロセッサ１７０５で受信したときに実行されてもよい。かつ／または固定記憶装置１７０８または揮発性記憶装置１７０６、あるいは、その他の不揮発性記憶装置に格納して後で実行してもよい。このように、コンピュータシステム１７０１はアプリケーションコードを搬送波の形で取得することもできる。最後に、本明細書で説明するプロセスおよび技術は、本質的にいかなる特定のデバイスにも関連しておらず、任意の適切なコンポーネントの組合せによって実装できることを理解されたい。さらに、本明細書で説明する内容により、さまざまな汎用デバイスを使用してもよい。また、専用の装置を構成して本明細書で説明する方法の手順を実行するのが有利であることは言うまでもない。本発明について特定の例に関連して説明してきたが、こうした説明はあらゆる点で例示的なものであり、限定的なものではないとものとする。当業者には言うまでもないが、ハードウェア、ソフトウェア、およびファームウェアのさまざまな組合せが本発明の実施に適している。たとえば、前述のソフトウェアは、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、シェル、ＰＨＰ、Ｊａｖａ（登録商標）など、さまざまなプログラミング言語またはスクリプト言語の形で実装できる。さらに、本発明のその他の実装は、本明細書に開示する本発明の詳細と実施に関する考察から当業者には明らかになるであろう。前述の実施形態のさまざまな態様および／またはコンポーネントは、ＣＤＰ機能を備えるコンピュータ制御のストレージシステムにおいて、単独でも任意に組み合わせても使用できる。詳細および実施例は例示的なものにすぎないと見なされ、本発明の真の範囲と精神は添付の請求項に示されるものとする。
【図面の簡単な説明】
【０１０７】
【図１】本発明の概要を示す図である。
【図２】システム構成を示す図である。
【図３】モジュール構成を示す図である。
【図４】ファイルシステムのデータレイアウトの例を示す図である。
【図５】ファイルシステムの論理構造の例を示す図である。
【図６】ＮＦＳ要求を示す図である。
【図７】ジャーナルの制御データを示す図である。
【図８】ジャーナル管理テーブルを示す図である。
【図９】スナップショットとジャーナルとの関係を示す図である。
【図１０】複数のスナップショットとジャーナルとの関係を示す図である。
【図１１】ジャーナル記録を開始するプロセスを示す流れ図である。
【図１２】スナップショットとジャーナルから元のボリュームにデータをリストアするプロセスを示す流れ図である。
【図１３】ファイルハンドル（ｆｉｌｅ  ｈａｎｄｌｅ）とパスのマッピングテーブルを示す図である。
【図１４】ファイルハンドルとパスとのマッピング情報を作成するプロセスを示す流れ図である。
【図１５】別のボリュームにリストアする場合にジャーナルを再実行するプロセスを示す流れ図である。
【図１６】ジャーナルの容量を確認するプロセスを示す流れ図である。
【図１７】本発明のシステムを実装できるコンピュータプラットフォームの例示的な実施形態を示す図である。
【図１】
2008033912.tif 000003
【図２】
2008033912.tif 000004
【図３】
2008033912.tif 000005
【図４】
2008033912.tif 000006
【図５】
2008033912.tif 000007
【図６】
2008033912.tif 000008
【図７】
2008033912.tif 000009
【図８】
2008033912.tif 000010
【図９】
2008033912.tif 000011
【図１０】
2008033912.tif 000012
【図１１】
2008033912.tif 000013
【図１２】
2008033912.tif 000014
【図１３】
2008033912.tif 000015
【図１４】
2008033912.tif 000016
【図１５】
2008033912.tif 000017
【図１６】
2008033912.tif 000018
【図１７】
2008033912.tif 000019
【外国語明細書】
2008033912000001.pdf