説明

共有読み出し専用ファイルシステムにおけるウイルス検出及び警報

読出し専用ファイルシステムの共有を可能にするとともに、読出し専用ファイルシステムの各クライアントに自身のデータ記憶領域に対する書き込みを行わせることができるシステムを提供する。ファイルは読出し専用パーシステント・リポジトリ・ファイルシステム上、又は書き込み可能なパーシステント・オーバーレイ・ファイルシステム上に記憶することができる。「楽観的共有」法とは、初期設定によりファイルシステム上の全てのものを読出し専用とすることを言う。ファイルを変更しようとする試みがある場合、即ち、プライベート・コピーが必要とされる場合には、殆どの書き込みファイルが小さいため、パフォーマンスの瞬断が通常は最小限となる。より大きなファイルの場合であっても、パフォーマンスの瞬断は1度だけの犠牲で済む。書き込むべきではないファイルへの書き込みを途中で阻止することにより、ウイルスを検出し警報を発することが可能となる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のコンピュータシステムによる記憶装置の共有に係り、特に、コピー・オン・ライト作業をサポートしつつ、複数のコンピュータが読み出し専用ファイルシステムを共有できるようにする仮想ファイルシステムに係る。
【背景技術】
【0002】
複数のコンピュータ間でリソースを共有するコンピュータ環境が多数存在する。例えば、ネットワークを介して多数のクライアントコンピュータにファイルを供給するサーバーコンピュータについて考えてみる。サーバーによってリモートPCにファイルが供給される際、ファイルにアクセスする各コンピュータが必要に応じてファイルに書き込みを行うためにファイルのコピーを必要とする場合、ファイルのコピーがサーバー上に保持されていなくてはならないことが多い。例えば、サーバーにアクセスするPCのユーザ環境が該サーバー上の初期設定ファイルにしたがって構成されている場合、ログイン後に環境を変更したい2台のPCはサーバー上に記憶された上記環境ファイルのコピーをそれぞれ持つ必要がある。
【0003】
また、例えば記憶領域ネットワーク(SAN)を使用して、複数のマシンに物理記憶装置を取り付けることもできる。しかしながら、この方法もまた問題がある。1台のハードドライブが複数のコンピュータによって共有され、各コンピュータがハードドライブにブロック毎にアクセスする状況を考えてみる。各ユーザのコンピュータは、ファイルシステム(例えばハードドライブ上のブロック)がどのような状態であるかについて把握している。例えば、ファイルシステムがディレクトリa、b及びcを有すると仮定する。第1のユーザはディレクトリdを作成することとし、第2のユーザがディレクトリeを作成することとする。よって、この例では、各ユーザがルートディレクトリを含むブロックを変更している。まず第1のユーザがディスクに書き込み、その後第2のユーザがディスクに書き込む場合、第1のユーザがディスクに書きこんだばかりであることを知らない第2のユーザは、第1のユーザが加えた変更に単に上書きするため、ファイルシステムはディレクトリeを持つがディレクトリdは持たないことになる。更に、コンピュータは、データレベルだけでなくセマンティックスレベルでもキャッシュする。例えば、存在しないファイルをコンピュータが開こうとする場合、該コンピュータはファイルが存在しないという事実をキャッシュすることがある。その間、該ファイルが別のコンピュータによって作成される。しかし、次回に第1のコンピュータがファイルにアクセスしようとすると、コンピュータはファイルシステムのセマンティックスのキャッシュを使用するため、ファイルを探そうとはせずに、キャッシュからの誤ったデータ、即ち本例ではファイルが存在しないという事実を報告する。
【0004】
Unix環境でディレクトリを共有する方法として、ネットワーク・ファイル・システム(NFS)を用いるものがある。NFSは、ディレクトリを共有するために、リモートコンピュータからのパーティションをローカルコンピュータにマウントする。同様なプログラムとして、Sambaがウィンドウズ・ベースのシステムのユーザ用に存在する。NFS及びSambaにより、複数のコンピュータがディレクトリへの書き込みアクセスを共有できる。更に、NFS及びSambaでは、NFS又はSambaサーバーをリモートコンピュータの代わりに物理記憶装置にアクセスさせることによって、リモートコンピュータを該記憶装置上のファイルにアクセスさせることができ、その際直接的なアクセスは要求しない。
【0005】
上記問題を解決する別の方法として、CXFS、VxFS及びLuster等のクラスタ化されたファイルシステムを用いるものがある。クラスタ化されたファイルシステムは、それらのブロック装置が共有されていることを認識し、同期機構及びセマンティック・ロックを有する。例えば、ファイルが作成されると、アクセスを共有する他のコンピュータにその情報が知らされる。データ層及びセマンティック層の両方で同期化が行われる。しかし、NFS及びクラスタ化されたファイルシステムでは、ディレクトリ又はファイルシステム全体での共有しか可能にならず、ファイルレベルでの共有は不可能である。更に、NFS及びクラスタ化されたファイルシステムでは、あるコンピュータが必要とする可能性があるデータに別のコンピュータが上書きすることや、ウイルス又は悪意のあるコード/ユーザによりコンピュータがデータを破壊することを防ぐことができない。
【0006】
したがって、書き込みが必要なデータを書き込みできるようにしつつ、複数のコンピュータがハードドライブ等の物理記憶装置へのアクセスを共有できるようにすることはかなり困難である。一般に、共有はディレクトリレベルのみで可能であり、ファイルレベルでは不可能である。これは、ディレクトリ全体を共有しなければならないか、書き込む場合にはディレクトリ全体をプライベートにしなくてはならないことを意味する。ドライブを共有するコンピュータのうち1台が、装置上で共有されているディレクトリ内のファイルを変更したい場合は、そのファイルを含むフォルダ全体のプライベート・コピーを該コンピュータのために作成しなければならない。大きいディレクトリにとっては、多大な記憶領域が無駄になってしまう。この問題は、以前の読み出し専用ディレクトリからの新しいファイルを書き込む必要がある度にますます深刻となる。
【0007】
上記問題を回避できたとしても、解決すべき別の問題が残っている。例えば、あるコンピュータがウイルスに感染すると、ウイルスが書き込み可能な共有デバイスに広がり、デバイスを共有する他の全システムが感染する恐れがある。更に、各コンピュータが設定ファイル等のような特定の名前が付いたファイルにアクセス必要がある場合、自身で使用するためにファイルを変更しようとする別のコンピュータによってファイルを破壊される可能性があるため、書き込み共有ディスクにファイルを記憶することができない。
【0008】
記憶領域を節約し、効率的に新サーバーを構築するため、 既存の技術を用いて複数のディレクトリを共有しようと試みたIT技術者もいた。新しく構築されるサーバー毎に全データのコピーが必要とされると、サーバーのために全データをコピーするのに長時間かかることがネックになる。更に、コストをかけて記憶領域を増やす必要があり、データをより多く共有した場合に比較してキャッシュの利用が少なくなるため、記憶領域に効率的にアクセスできなくなる。代わりに、データをコピーせずに共有しようという試みもなされてきた。この方法によれば、どのディレクトリが読み出し専用で共有できるかを決定するために、各アプリケーションがどこにデータを書き込むか判断する必要がある。すなわち、どのファイルが、どこに、どのような状況で書き込まれているか判断する必要がある。実際には、多くの一般的なアプリケーションは、どこにファイルを書き込んでいるか記録することはない。システムエンジニアがプログラム実行時に検査することにより、どこにファイルが書き込まれているか見つけようとする場合もあるが、これは確実な方法ではない。例えば、極めてまれに書き込まれ、検査で見つけることができない可能性があるファイルもある。更に悪いことには、当該ソフトウェア用にアップデートがリリースされると、検査分析をやり直さなければならない。このように脆弱な共有方法は、全ファイルを新しいサーバー用にコピーする慣習を生み出すこととなり、時間とコストの節約という当初の試みは無視される結果となった。
【0009】
複数のコンピュータ間でファイルを共有することに関しては、アップグレードを行う際にも問題点がある。アップグレードをしたいユーザと、アップグレードをしたくないユーザがいる場合、各ユーザはソフトウエアの共有バージョンを使用しているため、アップグレードは全員に対して行われるか、誰に対しても行われないかのどちらかになるため、問題が起きる。解決策の一つとして、当該ソフトウェアの様々なバージョンを様々なパーティション上に保持する方法がある。しかしながら、この方法ではスペースを追加する必要があり、管理間接費も上昇する。そして、各コンピュータを、新しいパーティションか、古いパーティションのどちらかを使用するように構成する必要がある。したがって、一度に全てをアップデートする以外は困難である。
【0010】
したがって、複数のコンピュータ間で記憶領域を共有するための効率的な方法が求められている。
【発明の開示】
【0011】
本発明は、データの「半共有」を可能にする。一般に、この半共有は、大量の情報が複数のコンピュータシステム間で共有され、各コンピュータシステムがデータの一部を変更する必要がある環境に適用される。
【0012】
一実施例において、本発明は読み出し専用ファイルシステムの共有を可能にしつつ、ワークステーション等の該読み出し専用ファイルシステムの各クライアントが自身のデータ領域に書き込みを行うことを可能にする。本発明の「楽観的共有」法とは、初期設定によりファイルシステム上の全てのものを読み出し専用とすることを言う。ファイルを変更しようとする試みがある場合、即ち、プライベート・コピーが必要とされる場合には、殆どの書き込みファイルが小さいため、パフォーマンスの瞬断が通常は最小限となる。より大きなファイルの場合であっても、パフォーマンスの瞬断は1度だけの犠牲で済む。
【0013】
本発明が意図するシステム構造においては、1以上のパーシステント・リポジトリ・ファイルシステムが多数のコンピュータ間で共有される。あるコンピュータ上で実行されるアプリケーションが読み出し専用ファイルシステム上にあるファイルにデータの書き込みを行おうとすると、代わりに該ファイルがオーバーレイ・ファイルシステムに書き込まれる。それに続くファイル作業は、読み出し専用ファイルシステムではなくオーバーレイ・ファイルシステムに対して行われる。ファイル名とそのパス位置との間のマッピングが保持されることにより、呼び出しアプリケーションに対して処理がトランスペアレントになる。したがって、二重に記憶する必要が無くなるため、ディスクキャッシュのより効率的な使用を可能にすることにより、費用を節約し、SAN装置及びNAS装置の性能を向上することができる。更に、ロード条件の変更やソフトウェアのアップデート等に対して迅速に新しいサーバーを配置することができる。
【0014】
【0015】
【0016】
【0017】
【0018】
【0019】
添付図面は、本発明の好適な実施例を単に例示したものである。当業者であれば、ここで説明される本発明の原則から逸脱せずに、ここで例示される構造や方法について他の実施例も実現できることを以下の説明から容易に理解できるであろう。
【発明を実施するための最良の形態】
【0020】
システム構造
図1は、本発明の利点を生かすように設計されたネットワーク構造を概念的に示すものである。図1には多数のコンピュータ102が図示されているが、各コンピュータ102は以下に説明するマップ・ファイル・システムのインスタンスを含み、読み出し専用パーシステント・リポジトリ (persistent repository) ・ファイル・システム226のインスタンスと通信することが好ましい。また、各コンピュータ102は、パーシステント・オーバーレイ・ファイル・システム220に読み出し・書き込みアクセスが可能である。したがって、以下に説明するように、コンピュータ102は必要に応じてオーバーレイ220にデータを書き込むと同時に、共通の読み出し専用ファイルストア226を共有することができる。なお、図1は、上記システムを利用したネットワークの種々の構成のうち一例を示したものである。例えば、リポジトリ・ファイル・システム226は1以上の物理ドライブでもよい。同様に、オーバーレイ・ファイル・システム220は複数のパーティションを有し2以上のコンピュータがアクセスする1のドライブであってもよく、各コンピュータ102用の1のドライブであってもよい。当業者であればわかるであろうが、共有読み出し専用アクセス権がリポジトリ・ファイル・システムに与えられ、非共有書き込みアクセス権がオーバーレイ・ファイル・システムに与えられるものであれば、物理的構成は如何なるものでもよい。
【0021】
図2は、マップ・ファイル・システム(MapFS)・インプリメンテーション212を有するシステム200の好適な実施例の概要を示すものである。シスコール・ハンドラ202は、Linux等のオペレーティングシステムの従来部分であって、アプリケーションからのシステム・コールを受け取り、処理する。下位のファイルシステムとの対話を要求するシステム・コールに対して、シスコール・ハンドラ202は該要求を仮想ファイルシステム層(VFS層)204に渡す。VFS層204は、Linuxオペレーティングシステムによって構築されるような従来の仮想ファイルシステム層である。VFS層204は、システム・カーネルの上位層が様々なファイルシステムとやり取りできるように設計された抽象層である。例えば、LinuxVFSは、ext3、FAT、及びNFSファイルシステムや、その他様々なファイルシステムをサポートする。VFS層により、ファイルを管理するためのインターフェースの標準セットをプログラムが持つことができ、オペレーティングシステムとファイルシステム・インプリメンテーションが通常の方法で相互に通信でき、ファイルシステム・インプリメンテーションが使用し得る共通のファイルシステム関連機能のライブラリを実現することによりコードの重複を回避することができる。
【0022】
また、VFS層204は、MapFSインプリメンテーション212と通信する。MapFSは、以下にその機能を説明するとおり、VFS層204から要求されるインターフェースを実現するホストファイルシステムである。MapFSインプリメンテーション212は、使用するオペレーティングシステム、例えばLinuxのVFS条件に合致するVFS層204とのインターフェースを提供する。MapFSインプリメンテーション212の作用については、図5を参照しながら以下に説明する。MapFSファイルシステムのインスタンスとして、MapFSインスタンス216がある。MapFSインスタンス216は、MapFSファイルシステム用の一時的な情報等、下位のビュー、リポジトリ及びオーバーレイ・ファイルシステムについての情報から成る情報を記憶する。(VFS層を介して)アプリケーションからの要求を受信し、必要に応じて該要求をリポジトリ及びオーバーレイ・ファイル・システムに渡し、アプリケーションに要求を満たさせるために返信する際、MapFSは要求元のアプリケーションに、コヒーレントな書き込み可能ファイルシステムがあると錯覚させる。
【0023】
リポジトリFSインプリメンテーション222は、データが共有されるパーシステント読み出し専用ファイルシステム226上のデータを保持するためのファイルシステムのインプリメンテーションである。リポジトリFSインプリメンテーション222はMapFSインプリメンテーション212からのファイル・システム要求を受信し、該要求に対して応答する。メモリ224中のリポジトリFSインスタンスは、パーシステント記憶領域中にある特定のリポジトリ・ファイル・システムの一時的なメモリ内ステータスを表す。ステータスには、例えば、どのようなファイルが存在し(または存在せず)、探索に成功したか否か、ファイル・サイズ、許可データ、実際のキャッシュ・データ・ブロック等が含まれる。
【0024】
オーバーレイFSインプリメンテーション214は、パーシステント・オーバーレイ・ファイルシステム・インスタンス220に書き込み可能な記憶領域を提供するためのファイルシステムのインプリメンテーションである。オーバーレイFSインプリメンテーション214はMapFSインプリメンテーション212からの書き込み要求を含むファイルシステム要求を受信し、該要求に対して応答する。メモリ218内のオーバーレイFSインスタンスはリポジトリFSインスタンス224と同様に動作する。好ましい一実施例において、オーバーレイFSは、MapFSがインスタンス化する際に指定される位置にルートを置くディレクトリ階層である。
【0025】
ViewFSインプリメンテーション206は、MapFSインプリメンテーション212に参照されオーバーレイ及び/又はリポジトリ・ファイル・システムに記憶されるファイルネーム間のマッピングを保持する。パーシステントViewFSインスタンス210は上記マッピングの物理(つまり、ディスク)レコードを保持する一方、ViewFSインスタンス208はリポジトリFSインスタンス224及びオーバーレイ・インスタンス218と同様な情報をメモリに保持する。好ましい一実施例において、ViewFSは、MapFSがインスタンス化する際に指定される位置にルートを置くディレクトリ階層である。
【0026】
一般に、VFS層204を介してMapFSインプリメンテーション212が受け取るファイル要求は、ファイルのリポジトリ・バージョンにアクセスことにより、又はファイルのオーバーレイ・バージョンにアクセスことにより満たされる。ビューは、ファイル上の要求を満たすためにはどのホスト・ファイルを使用するべきかについて指定する。ファイルがリポジトリ上にあり、該ファイルを変更する試みがあった場合には、該ファイルはオーバーレイに移動される。以下に例を示す。
【0027】
図5は、一実施例におけるMapFSインプリメンテーション212の機能を実施する論理サブユニットを示す。MapFSインプリメンテーション212は、マッピング・モジュール502、ファイル処理モジュール504、及びファイルシステム通信モジュール506を有する。ファイルシステム通信モジュール506は、ViewFSインプリメンテーション206やリポジトリFSインプリメンテーション222等の他のファイルシステム・インプリメンテーションと通信するためのインターフェースを提供する。マッピング・モジュール502はMapFSインプリメンテーション212にマッピング機能を提供し、マッピング機能にはシステム200内のファイル又はデータ構造の位置を取得するために用いるロジックが含まれる。ファイル処理モジュール504はVFS層204からの要求を受け取り、該要求に対して応答するものであり、ファイルシステム処理を行うためのロジックを含む。
【0028】
データ・フロー
Linux環境においては、MapFSの名前と、どのようにインスタンス化するか示すモジュールをロードすることが好ましい。モジュールがロードされると、新しいファイルシステムを登録する機能を呼び出し、ファイルシステムの名前と、その名前によってLinuxの「マウント」動作が呼び出される際に新しいスーパーブロックをインスタンス化するための手順を渡す。当業者であれば、このモジュールを用いてファイルシステムをロードする技術が従来から知られていることがわかるであろう。
【0029】
MapFSインプリメンテーション212をインスタンス化するため、モジュールがロードされた際に指定されたインスタンス化手順がビュー及びオーバーレイの位置を含む引数で呼び出される。MapFSのマウント箇所は、MapFSをインスタンス化するエンティティによって指定される。ビューによって参照されるファイルを探索するための相対パス上にマウントされたファイルシステムのツリー内の一箇所にあるルックアップ・ルートが別の引数によって指定される。MapFSがインスタンス化されると、以下に説明するように処理される従来のシステム・コールにより作用を受ける。
【0030】
図3は、パーシステント・リポジトリ226上のファイルの探索を示すデータ・フロー図ある。まず、シスコール・ハンドラ202がアプリケーションからの探索シスコールを303で受け取る。次に、シスコール・ハンドラ202はVFS層204を302で呼び出す。VFS層204はMapFS216のうち一般にアクセス可能な部分を304で調べ、現在探索中のファイル名に関する情報をMapFSインスタンス216が有しているか否か確認する。一実施例においては、MapFSインスタンス216のデータを調べる際、VFS層204は既に探索された名前及びその探索結果の一覧表を検索する。上記ファイルが存在する場合は、その探索結果がMapFS・inodeの参照となる。上記ファイルは存在しないが探索されている場合、探索結果は、ファイルが存在していないという負の入力となる。本例では、ここで初めてパス名が解釈されているため、MapFSインスタンス216は上記ファイル名に関する情報を有していないことになる。したがって、次にVFS層204はMapFSインプリメンテーション212を306で呼び出し、パス名を探索する。VFS層204は、MapFS親ディレクトリへのハンドル及び該ディレクトリ中において探索するファイル名をファイル処理モジュール504に渡す。好ましくは、MapFSインプリメンテーション212がファイル名を探索し、該ファイル名のエントリを最近探索したファイル名の一覧表に挿入し、探索リクエストの終了後に、該エントリにハンドルを返す。
【0031】
マッピング・モジュール502は、(ファイルシステム通信モジュール506を介して)308でViewFSインスタンス208を調べ、ファイルがキャッシュされているか否か確認する。好ましくは、MapFSと同様な方法で、即ち、ファイル名及び探索結果の一覧表に、ビューがファイル名をキャッシュする。また、ここでは初めてファイルが探索されているため、MapFS処理以外の何らかの処理により探索されていない限り、ビューのキャッシュにも存在しないこととなる。したがって、マッピング・モジュール502は、310でViewFSインプリメンテーション206に、好ましくは上述したようにVFS層がMapFSインスタンスデータを調べる場合の方法と同様な方法でビュー内のファイル名を探索するよう依頼する。ViewFSインプリメンテーション206は、312でディスク210上のパーシステントViewFSインスタンス内のファイルを探索し、314でメファイルのメモリ内記述を読み込みファイル名とinodeの一覧表にエントリを挿入することによってメモリ208内のViewFSインスタンスを更新する。ViewFSインプリメンテーション206は、316でViewFSインスタンス208の参照をマッピング・モジュール502に返す。
【0032】
なお、データ・フローにおけるこの時点では、ステップ310〜316と同様な一連のステップが繰り返され、ビュー内のファイル内容を読み出し、ホストファイル・パスを見つける。ただし、このように繰り返されるステップは図3では省略されている。通常のファイルの場合は、ビュー・インプリメンテーションにより記憶されるファイル内のデータが、該ファイルへの絶対的なパスである。ディレクトリ又は基本ファイル(ブロックや文字の特殊ファイル、シムリンク、名前付きパイプ等の非データ、非ディレクトリファイル)では、ホスト・コンポーネントが無い。すなわち、ビュー・コンポーネントは、ディレクトリ又は非データファイルであり、該ファイルの特性は転送以外で使用される。
【0033】
次に、マッピング・モジュール502は318でリポジトリFSインスタンス224を調べ、ビュー・コンポーネントによって参照されるファイルが、リポジトリFSに既に知られているか否か判断する。ここでは、該ファイルが初めて探索されているので、MapFS処理以外の何らかの処理によって知らされていない限り、リポジトリFS224には知られていない。次に、マッピング・モジュール502は、リポジトリFSインプリメンテーション222に、ビューから既に抽出したパス名を探索するよう依頼する。リポジトリFSインプリメンテーション222は、322でパーシステント・リポジトリFSインスタンス226からのデータを探索し、324でメモリ224内のリポジトリFSインスタンスを更新する。次に、リポジトリFSインプリメンテーション222は、326で、ビュー及びリポジトリから探索した情報を参照するMapFSファイルとともに探索結果をMapFSインプリメンテーション212に返す。最後に、ファイル処理モジュール504は、330で一覧表のエントリへのハンドルをVFS層204に返し、VFS層は332で該ハンドルをシスコール・ハンドラ202に返し、シスコール・ハンドラ202は334で該ハンドルをプログラムに返す。なお、上記一覧表のエントリへのハンドルは、上記ファイルが通常のファイルである場合はビュー及びホスト・ファイルを内部で参照し、上記オブジェクトがディレクトリ又は基本ファイルである場合はビューのみを参照するMapFSオブジェクトへのハンドルである。
【0034】
VFS層204を介してMapFSインプリメンテーション212によって受け取られたシスコールは、指定された名前のファイルを作成する要求である作成命令である場合もある。例えば、VFS層204が「/foo/bar/baz」というファイルを作成する要求を受け取る場合がある。VFS層204は、上述したようにMapFSインプリメンテーション212によって探索作業を行い、「foo/bar」上に「baz」という名前のファイルを作成しようと試みるが失敗する。次に、VFS層204は、ファイル処理モジュール504に、「foo/bar」上に「baz」を作成するよう依頼する。ファイル処理モジュール504は、MapFS親ディレクトリ及び作成すべきファイル名「baz」へのハンドルをVFS層204から受け取る。次に、マッピング・モジュール502は、ViewFSインプリメンテーション206に「baz」という名前のファイルをビュー・ディレクトリ「foo/bar」内に作成するよう要求する。ViewFSインプリメンテーション206は、パーシステントViewFSインスタンス210及びメモリ208内のViewFSインスタンスを更新し、新しいファイルへのハンドルをMapFSインプリメンテーション212に返す。次に、マッピング・モジュール502は返されたファイルを調べ、ViewFSインプリメンテーション206に書き込み要求を送り、オーバーレイ上に作成しようとするファイルへのパスを有するビュー・ファイルを読み込む。パスは、ビューが渡したファイルのinode番号を参照することにより形成される。ファイル処理モジュール504は、(ここでもファイルシステム通信モジュール506を介して)作成要求をビュー・ファイルのinode番号とともにオーバーレイFSインプリメンテーション214に送る。そして、オーバーレイFSインプリメンテーション214はパーシステント・オーバーレイFSインスタンス220内にファイルを作成し、メモリ218内のオーバーレイFSインスタンスを更新し、ファイルへのハンドルをファイルシステム通信モジュール506に返す。MapFSインプリメンテーション212は、ビュー及びオーバーレイ・コンポーネントを参照するMapFSファイルオブジェクトを構築し、該オブジェクトをMapFSインスタンス216に挿入し、新しいファイルへのハンドルをVFS層204に返し、VFS層204は該ハンドルを要求元のプログラムに渡す。当業者であれば、上述したオーバーレイ・ファイルへの命名方法が、採用し得る数多くの方法の一例であることが分かるだろう。
【0035】
図4は、ホスト・コンポーネントが現在パーシステントFSリポジトリ・インスタンス226上にあるファイルをプログラムが書き込む際のデータ・フローを示す図である。
【0036】
まず、シスコール・ハンドラ202は、400でプログラムから書き込みコールを受け取り、402で該書き込みコールをVFS層204に渡す。VFS層204は、404で該コールをファイル処理モジュール504に渡す。MapFSインプリメンテーション212は、406でMapFSインスタンス216内のファイルのプライベートデータを調べ、ホスト・コンポーネント・ファイルの現在位置を確認する。MapFSインスタンス216は、ホスト・ファイルのinodeへのハンドルを含むことが好ましい。本例では、ファイルがリポジトリ・ファイル・システム上にあるため、MapFSインスタンスはリポジトリ・インスタンス上にあるinodeへのハンドルを有することになる。次に、ファイル処理モジュール504は、408でリポジトリFSインスタンス224のホスト・ファイルの公開部分を調べ、そのファイルシステム(リポジトリ)が読み出し専用にマウントされていることと、MapFSインプリメンテーション212がオーバーレイ・ファイル・システムへのコピー・オン・ライト作業を行う必要があることを確認する。次に、ファイル処理モジュール504は、410でオーバーレイ・インプリメンテーション214を呼び出し、新しいファイルを作成する。
【0037】
オーバーレイ・インプリメンテーション214は、412でパーシステント・オーバーレイ・インスタンス220内に新しいファイルを作成し、414でディスク上に作成されたファイルについての情報を含む新たに割り当てられたメモリ内inodeについての情報でメモリ内のオーバーレイ・インスタンス218を更新する。更に、オーバーレイ・インプリメンテーション214は、新たに作成されたファイルに対して、名前とinodeのマッピング・テーブルにエントリを記入する。次に、オーバーレイ・インプリメンテーション214は、416で新しいファイルへのハンドルをMapFSインプリメンテーション212に返す。そして、MapFSインプリメンテーション212は、418で現在のホスト・ファイルの内容を読み出す要求をリポジトリFSインプリメンテーション222に送る。
【0038】
リポジトリFSインプリメンテーション222は、420でディスク226上のパーシステント・リポジトリFSインスタンスからファイルの内容を読み出し、422でメモリ内のコピーを更新し、424でファイルの内容をMapFSインプリメンテーション212に返す。ファイル処理モジュール504は、426でオーバーレイFSインプリメンテーション214に書き込み要求を送ることによりオーバーレイ上の新しいファイルにデータを書き込む。オーバーレイFSインプリメンテーション214は、428でパーシステント・オーバーレイFSインスタンス226にデータを書き込み、430でメモリ218のオーバーレイFSインスタンス内のデータキャッシュを更新し、432で成功コードをMapFSインプリメンテーション212に返す。
【0039】
次に、マッピング・モジュール502は、434でViewFSインプリメンテーション208に書き込み命令を送り、MapFSファイルのホスト・コンポーネントの位置をリポジトリ・ファイル・システムからオーバーレイに更新する。ViewFSインプリメンテーションは、436でメモリ208内のViewFSインスタンスを更新し、438でパーシステントViewインスタンス210を更新し、440でMapFSインプリメンテーション212にエラーが発生しなかった旨を通知する。
【0040】
なお、何らかの処理によってファイルがメモリ内に直接マッピングされた場合には、データ・フローにおける現時点で仮想メモリ・サブシステムと同期化することが好ましい。
【0041】
ファイル処理モジュール504は、442で当初の書き込み要求をオーバーレイFSインプリメンテーション214に満たさせるために送る。オーバーレイFSインプリメンテーション214は、444でメモリ218内のオーバーレイFSインスタンスを更新し、ディスク220上のパーシステント・オーバーレイ・インスタンスを更新する。そして、オーバーレイFSインプリメンテーションは、448でMapFSインプリメンテーション212に書き込み結果を返す。
【0042】
最後に、ファイル処理モジュール504は、450で書き込み結果をVFS層204に返し、VFS層204は書き込み結果をシスコール・ハンドラ202に返し、454で書き込み結果は要求元であるプログラムに返される。
【0043】
一実施例においては、ディスク220上のパーシステント・オーバーレイ・インスタンスが限界容量に近づくと、ファイルシステムに新しいオーバーレイを動的に割り当て、追加することができる。そして、MapFSが書き込み要求を新しいオーバーレイに送る。MapFSはMapFSファイルオブジェクトからホストファイルオブジェクトへの翻訳要求をトランスペアレントに処理するため、ホスト・ファイルになされた変更は要求元のアプリケーションに対して完全にトランスペアレントである。このようにして、MapFSインプリメンテーション212はメモリアクセスの連続性を保証する。
【0044】
ウイルスの検出及び報告
複数のコンピュータが読み出し専用記憶装置を共有し、オーバーレイに対して非公開にアクセスできる環境における一般的な使用パターンについて観察を行うことができる。実際には、実行可能なファイルは普通はコンパイルされたコードを含むため、通常は変更すべきではない。逆に、データファイルの変更は、本来は不審な行為ではない。
【0045】
上述したように、プログラムがパーシステント・リポジトリFSインスタンス226上の読み出し専用ファイルを変更しようとしているとMapFSインプリメンテーション212が判断すると、ファイル処理モジュール504がオーバーレイFSインプリメンテーション214を介してファイルのコピー作成を開始し、マッピング・モジュール502及びViewFSインプリメンテーション206により、ファイル名からオーバーレイ上の書き込み可能なコピーの位置への間接マッピングを作成する。
【0046】
オーバーレイ上の各ファイルに初めて書き込みされると、ビュー内に該ファイルのコピー及びマッピングが作成されるため、該コピー及びマッピングが、コンピュータ上で動作するプログラムによってなされた全ての書き込み要求のレコードとしての役割を果たす。好ましい一実施例においては、ファイル処理モジュール504が、書き込み要求のレコードを解析し、実行可能なファイルに対する書き込みやその他の異常動作等、マネージド・インスタンス中のウイルスの存在を示している可能性があるものを検出する。
【0047】
例えば、正常な動作においては、コンピュータ102上で動作するプログラムは実行可能なファイルに書き込みを行わない。コンピュータ102が実行可能なファイルに書き込みを行っている場合は、実行可能なファイルを侵す等の目的で実行可能なファイルを変更したコンピュータ・ウイルスをコンピュータ102が実行していることを示す。実行可能なファイルの他にも、通常は書き込むべきではない種類のファイルが有り得る。好ましい一実施例においては、MapFSインプリメンテーション212が、書き込むべきではないファイル種類のレコードを保持する。別の一実施例では、MapFSインプリメンテーション212が、書き込むべきではない特定のファイル一覧を保持する。
【0048】
一実施例において、ファイル処理モジュール504は、VFS層204から受け取った書き込み要求を監視する。書き込み要求が実行可能なファイル又は変更すべきではない他のファイルである場合は、ファイル処理モジュール504が警報を発するか、又は異常動作を示す他の機能を作動させる。別の実施例では、ウイルスやその他の異常動作を特定するために、ファイル処理モジュール504がオーバーレイFSインプリメンテーション214上のファイル及びViewFSインプリメンテーション206内のマッピングを定期的にチェックし、変更すべきではない実行可能なファイル等があるか確認する。
【0049】
以上、限られた数の実施例について本発明を詳細に説明した。当業者であれば、本発明を他の実施例でも実施できることが分かるであろう。例えば、ViewFSインプリメンテーション206の間接マッピング機能は、他の実施例ではデータベースや、より一般的には間接マッピングをサポートできるものであれば如何なるデータ構造によっても代替可能である。
【0050】
また、本発明は、LAN環境におけるデータ共有以外にも多くの場合に適用可能である。一般的に、本発明は、供給されるデータの全てではないが殆どのデータを共有データ、即ち受信者に共通のデータとする場合に適している。例えば、一実施例において、本発明は、ユーザが閲覧するコンテンツの殆どを不変とするが、該コンテンツのごく一部のみユーザ毎に変更できるポータル技術を提供するために適用される。このような場合にビューによって行われる間接マッピングは、あるファイルから別のファイルへのマッピングではなく、あるウェブページから別のウェブページへのマッピングである。このような実施例においては、MapFSインプリメンテーション212のロジックをデータ・マッピング・モジュールとしてより一般的に記述することができる。
【0051】
ここに記載した説明では、構成要素の名前、用語の大文字表記、属性、データ構造、又は他のプログラミング若しくは構造的側面は、強制的なものでも重要なものでもなく、本発明やその特徴を実施する機構は異なる名前、形式、又はプロトコルを有するものでもよい。更に、本システムは上述のようにハードウェア及びソフトウェアの組み合わせから成るものでもよいし、ハードウェア要素に全体が含まれるものでもよい。また、ここで説明した種々のシステム構成要素間における機能の分担は一例であって、強制的なものではなく、単一システム構成要素によって実行される機能を複数の構成要素によって実行してもよいし、複数の構成要素によって実行される機能を単一の構成要素が実行することもできる。例えば、MapFSインプリメンテーション212等の機能を、多数又は1のモジュールで提供してもよい。
【0052】
上記説明の一部は、情報に対する処理のアルゴリズム及びシンボリック表現によって本発明の特徴を表すものである。このようなアルゴリズムによる記述や表現は、ある当業者が他の当業者に対して自らの研究内容を最も効果的に伝えるために用いられる手段である。なお、上記処理は、機能的又は論理的に説明されているが、コンピュータプログラムによって実行される。更に、このような処理の構成をモジュール又はコード装置と呼ぶが時として便利であることがわかっている。
【0053】
しかしながら、これらの用語又は類似の用語全ては、適当な物理量に対応するものであり、該物理量に適用される便利な標識でしかないことを念頭におくべきである。本説明で特に指定しない限り、本説明において、「処理」、「演算」、「判断」等の用語を用いた記述は、コンピュータシステムのメモリ、レジスタ、又はその他の情報記憶、伝達又は表示装置内の物理(電子)量として表されたデータを操作し変換するコンピュータシステム又は同様な電子演算装置の動作及び処理を指すものである。
【0054】
本発明の一つの観点によると、ここにアルゴリズム形式で説明された処理工程や命令が含まれる。なお、本発明の処理工程及び命令は、ソフトウェア、ファームウェア、又はハードウェアに具現化することができ、ソフトウェアに具現化した場合には、リアルタイムネットワークのオペレーティングシステムによって使用される様々なプラットフォーム上に常駐し、操作される。
【0055】
また、本発明は、ここで説明した処理を実行する装置に係るものでもある。そのような本発明の装置は、必要とされる目的のために特別に構成されたものでもよいし、コンピュータに記憶されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータによって構成してもよい。このようなコンピュータプログラムは、コンピュータ読み出し可能な記憶媒体、例えば、フロッピーディスク、光ディスク、CD−ROM、光磁気ディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気若しくは光学式カード、特定用途向け集積回路(ASIC)、又は電子命令を記憶するのに適した他の媒体等であって、コンピュータシステムバスに接続された記憶媒体に記憶することができるが、これらに限定されるものではない。更に、本明細書中で言及したコンピュータは単一の処理装置を含むものでもよいし、より高い演算能力を実現するために複数の処理装置を含むように設計された構造のものでもよい。
【0056】
ここで説明したアルゴリズムや表示は、本来、特定のコンピュータやその他の装置に関連するものではない。ここで教示した内容に応じたプログラムとともに様々な汎用システムを使用することができるし、必要とされる処理工程を実行するためにより特化した装置を構築する方がより都合が良いこともある。このような様々なシステムに必要とされる構造は、上記説明から明らかであろう。更に、本発明は特定のプログラミング言語に関して説明したものではない。ここで説明した本発明の教示内容を実施するために様々なプログラミング言語を用いることができ、特定の言語についての言及は本発明の実施可能性及び最良の形態を開示するために行われている。
【0057】
最後に、本明細書中で用いた表現は、その殆どが読みやすさ及び説明目的のために選択されたものであり、本発明の主題を線引きしたり制限したりするために選択されたものではない。したがって、本発明の開示内容は一例に過ぎず、本発明の範囲を制限するものではない。
【図面の簡単な説明】
【0058】
【図1】本発明の一実施例におけるネットワーク構造を示すブロック図である。
【図2】本発明の一実施例におけるシステム構造の概要を示すブロック図である。
【図3】本発明の一実施例における探索作業におけるデータ・フローを示すフローチャートである。
【図4】本発明の一実施例におけるコピー・オン・ライト作業におけるデータ・フローを示すフローチャートである。
【図5】本発明の一実施例におけるマップ・ファイル・システムを示すブロック図である。

【特許請求の範囲】
【請求項1】
共有読み出し専用ファイルシステムにおけるウイルスを検出するためのコンピュータ実行可能な方法であって、
仮想ファイルシステム(VFS)層からの要求であって、ファイル識別子及び識別されたファイルに対して行う操作を含む要求を受け取る工程と、
前記識別されたファイルが読み出し専用ファイルシステム上にあるか否か判断する工程と、
前記識別されたファイルが読み出し専用ファイルシステム上にあると判断されると、前記識別されたファイルの種類が書き込むべきではない種類のファイルであると判断する工程と、
前記ファイルの異常を示す警報を発する工程と、
を具備することを特徴とする方法。
【請求項2】
請求項1に記載したコンピュータ実行可能な方法であって、前記ファイルの種類は、実行可能なファイルの種類であることを特徴とする方法。
【請求項3】
共有読み出し専用ファイルシステムにおけるウイルスを検出するためのコンピュータ実行可能な方法であって、
ファイルへの書き込み要求を受け取る工程と、
前記ファイルが読み出し専用データ記憶装置上にあると判断する工程と、
前記ファイルが書き込むべき種類のファイルであるか否か判断する工程と、
前記ファイルが書き込むべき種類のファイルではないと判断されると、ウイルスを警告する警報を発する工程と、
前記ファイルが書き込むべき種類のファイルであると判断されると、自動的に前記ファイルを書き込み可能なファイルシステムにコピーする工程と、
前記ファイルのコピーに書き込む工程と、
を具備することを特徴とする方法。
【請求項4】
請求項3に記載したコンピュータ実行可能な方法であって、前記書き込むべきではないファイルの種類は、実行可能なファイルの種類であることを特徴とする方法。
【請求項5】
共有読み出し専用ファイルシステムにおけるウイルスを検出するためのコンピュータが実行可能な方法であって、
複数の書き込み要求であって、書き込むべきファイルをそれぞれ識別する書き込み要求を受け取る工程と、
前記ファイルが読み出し専用データ記憶装置上にあると判断する工程と、
前記ファイルを書き込み可能な記憶装置にコピーする工程と、
各ファイルから該ファイルのコピーへのマッピングを作成する工程と、
前記コピーされたファイルのうち1のファイルが書き込むべきではない種類のファイルか否か判断する工程と、
前記コピーされたファイルのうち1のファイルが、書き込むべきではない種類のファイルであると判断されると、ウイルスを警告する警報を発する工程と、
を具備することを特徴とする方法。
【請求項6】
請求項5に記載したコンピュータが実行可能な方法であって、前記書き込むべきではないファイルの種類には、実行可能なファイルが含まれることを特徴とする方法。
【請求項7】
共有読み出し専用ファイルシステムにおけるウイルスを検出するための装置であって、
ファイルシステムからの要求であって、ファイル識別子及び識別されたファイルに対して行う作業を含む要求を受け取るファイル処理モジュールと、
前記ファイル処理モジュールと通信可能に接続され、前記ファイル識別子と、該識別子によって識別されるファイルの位置との間のマッピングを決定するマッピング・モジュールと、
前記マッピング・モジュールと通信可能に接続され、前記ファイルが書き込むべきではない種類のファイルであるか否か判断し、前記ファイルの種類が書き込むべきではない種類のファイルであると判断されると、ウイルスを警告する警報を発し、前記ファイルの種類が書き込むべきではない種類のファイルではないと判断されると、前記識別されたファイルに対する前記作業を行うファイルシステム通信モジュールと、
を具備することを特徴とする装置。
【請求項8】
請求項7に記載した装置であって、前記書き込むべきではないファイルの種類には、実行可能なファイルが含まれることを特徴とする方法。
【請求項9】
共有読み出し専用ファイルシステムにおけるウイルスを検出するためのコンピュータプログラム製品であって、コンピュータ読み取り可能な媒体上に記憶され、
ファイルへの書き込み要求を受け取る工程と、
前記ファイルが読み出し専用データ記憶装置上にあると判断する工程と、
前記ファイルが、書き込むべき種類のファイルであるか否か判断する工程と、
前記ファイルが書き込むべき種類のファイルではないと判断されると、ウイルスを警告する警報を発する工程と、
前記ファイルが書き込むべき種類のファイルであると判断されると、自動的に前記ファイルを書き込み可能なファイルシステムにコピーする工程と、
前記ファイルのコピーに書き込む工程と、
を処理装置に実行させるように構成されたコードを含むコンピュータプログラム製品。
【請求項10】
請求項9に記載した方法であって、前記書き込むべきではないファイルの種類には、実行可能なファイルが含まれることを特徴とする方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2007−503658(P2007−503658A)
【公表日】平成19年2月22日(2007.2.22)
【国際特許分類】
【出願番号】特願2006−532826(P2006−532826)
【出願日】平成16年5月7日(2004.5.7)
【国際出願番号】PCT/US2004/014164
【国際公開番号】WO2004/102326
【国際公開日】平成16年11月25日(2004.11.25)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.UNIX
2.ウィンドウズ
3.Linux
4.フロッピー
【出願人】(505413118)レバンタ,インク. (1)
【Fターム(参考)】