(57)【特許請求の範囲】
【請求項１】
第１計算機と、ネットワークを介して前記第１計算機に接続される第２計算機と、前記第１計算機及び前記第２計算機に接続される記憶装置と、を備える計算機システムであって、
前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、
前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、
前記記憶装置は、データの記憶領域を提供する記憶媒体と、前記第１計算機及び前記第２計算機に接続され、前記記憶領域へのデータの書き込み及び読み出しを制御するコントローラと、を備え、
前記第１計算機は、
前記ネットワークを介してデータの書き込み要求を受信すると、前記書き込まれるべきデータを前記記憶装置に書き込み、
前記書き込まれたデータのウィルススキャン要求を前記第２計算機に送信し、
前記第２計算機は、
前記第１計算機から前記ウィルススキャン要求を受信すると、前記書き込まれたデータを前記記憶装置から読み出し、
前記読み出されたデータのウィルススキャンの一部を実行し、
前記第１計算機は、前記読み出されたデータのウィルススキャンの一部が終了した後、前記受信した書き込み要求に対する応答を送信し、
前記第２計算機は、前記第１計算機が前記応答を送信した後、前記読み出されたデータのウィルススキャンの残りを実行することを特徴とする計算機システム。
【請求項２】
前記第１計算機は、前記記憶装置に書き込まれた前記データの読み出し要求を、前記ネットワークを介して受信すると、前記書き込まれたデータのウィルススキャン要求を前記第２計算機に送信し、
前記第２計算機は、前記第１計算機からウィルススキャン要求を受信すると、前記書き込まれたデータを前記記憶装置から読み出し、
前記読み出されたデータのウィルススキャンの残りを実行し、
前記第１計算機は、前記ウィルススキャンの残りが終了した後、前記書き込まれたデータを前記記憶装置から読み出して、前記読み出されたデータを、前記ネットワークを介して送信することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記第２計算機又は前記記憶装置は、複数のウィルスのパターンを保持し、
前記第２計算機は、
前記複数のパターンの一部と、前記読み出されたデータとを照合することによって、前記読み出されたデータのウィルススキャンの一部を実行し、
前記ウィルススキャンの進捗を示す情報を含む管理情報を保持し、
前記管理情報に基づいて、前記複数のパターンのうち照合が終了した前記一部を除く残りの部分と、前記読み出されたデータとを照合することによって、前記読み出されたデータのウィルススキャンの残りを実行することを特徴とする請求項１に記載の計算機システム。
【請求項４】
前記第１計算機は、
所定の時間内に前記ネットワークを介して受信した全アクセス要求の数に対する書き込み要求の数及び読み出し要求の数の比率を算出し、
前記算出された比率を前記第２計算機に送信し、
前記第２計算機は、
前記書き込み要求の数の比率が前記読み出し要求の数の比率より高い場合、前記複数のパターンの総数の半分より少ない数の前記パターンと、前記読み出されたデータとを照合することによって、前記読み出されたデータのウィルススキャンの一部を実行し、
前記書き込み要求の数の比率が前記読み出し要求の数の比率より低い場合、前記複数のパターンの総数の半分より多い数の前記パターンと、前記読み出されたデータとを照合することによって、前記読み出されたデータのウィルススキャンの一部を実行することを特徴とする請求項３に記載の計算機システム。
【請求項５】
前記第２計算機は、
前記算出された比率を受信すると、前記受信した最新の比率と、前回以前に受信した前記比率とを比較し、
前記受信した最新の比率が示す前記読み出し要求の数の比率が、前回以前に受信した前記比率が示す前記読み出し要求の数の比率より高い場合、照合が終了した前記一部を除く残りの前記パターンのうち少なくとも一つの前記パターンと、前記読み出されたデータとを照合することを特徴とする請求項４に記載の計算機システム。
【請求項６】
前記第２計算機又は前記記憶装置は、さらに、前記各ウィルスの危険度を示す情報を保持し、
前記複数のパターンは、第１のウィルスのパターンである第１パターン、及び、第２のウィルスのパターンである第２パターンを含み、
前記第２計算機は、前記各ウィルスの危険度を示す情報に基づいて前記第１のウィルス及び前記第２のウィルスの危険度を判定し、
前記第１のウィルスの危険度が前記第２のウィルスの危険度より高い場合、前記第２パターンと前記読み出されたデータとを照合する前に、前記第１パターンと前記読み出されたデータとを照合することを特徴とする請求項３に記載の計算機システム。
【請求項７】
前記第２計算機は、前記パターンが新たに追加されたか否かを判定し、
前記パターンが新たに追加された場合、照合が終了した前記一部を除く残りの前記パターンのうち前記追加されたパターンの数と同数の前記パターンと、前記読み出されたデータとを照合することを特徴とする請求項３に記載の計算機システム。
【請求項８】
前記第２計算機又は前記記憶装置は、少なくとも一つのウィルスのパターンを保持し、
前記第２計算機は、
前記パターンと、前記読み出されたデータの一部とを照合することによって、前記読み出されたデータのウィルススキャンの一部を実行し、
前記ウィルススキャンの進捗を示す情報を含む管理情報を保持し、
前記管理情報に基づいて、前記パターンと、前記読み出されたデータのうち照合が終了した前記一部を除く残りの部分とを照合することによって、前記読み出されたデータのウィルススキャンの残りを実行することを特徴とする請求項１に記載の計算機システム。
【請求項９】
前記第２計算機は、
前記読み出されたデータのウィルススキャンの一部が終了すると、前記第２プロセッサの使用率を所定の閾値と比較し、
前記第２プロセッサの使用率が前記所定の閾値より低い場合、前記読み出されたデータのウィルススキャンの残りを実行することを特徴とする請求項１に記載の計算機システム。
【請求項１０】
第１計算機と、ネットワークを介して前記第１計算機に接続される第２計算機と、前記第１計算機及び前記第２計算機に接続される記憶装置と、を備える計算機システムの制御方法であって、
前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、
前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、
前記記憶装置は、データの記憶領域を提供する記憶媒体と、前記第１計算機及び前記第２計算機に接続され、前記記憶領域へのデータの書き込み及び読み出しを制御するコントローラと、を備え、
前記方法は、
前記第１計算機が、前記ネットワークを介してデータの書き込み要求を受信すると、前記書き込まれるべきデータを前記記憶装置に書き込む手順と、
前記第１計算機が、前記書き込まれたデータのウィルススキャン要求を前記第２計算機に送信する手順と、
前記第２計算機が、前記第１計算機から前記ウィルススキャン要求を受信すると、前記書き込まれたデータを前記記憶装置から読み出す手順と、
前記読み出されたデータのウィルススキャンの一部を実行する手順と、
前記読み出されたデータのウィルススキャンの一部が終了した後、前記第１計算機が、前記受信した書き込み要求に対する応答を送信する手順と、
前記第１計算機が前記応答を送信した後、前記第２計算機が、前記読み出されたデータのウィルススキャンの残りを実行する手順と、を含むことを特徴とする方法。
【請求項１１】
前記方法は、さらに、
前記第１計算機が、前記記憶装置に書き込まれた前記データの読み出し要求を、前記ネットワークを介して受信すると、前記書き込まれたデータのウィルススキャン要求を前記第２計算機に送信する手順を含み、
前記第２計算機が、前記読み出されたデータのウィルススキャンの残りを実行する手順は、
前記第２計算機が、前記第１計算機からウィルススキャン要求を受信すると、前記書き込まれたデータを前記記憶装置から読み出し、
前記第２計算機が、前記読み出されたデータのウィルススキャンの残りを実行することによって実行され、
前記方法は、さらに、
前記ウィルススキャンの残りが終了した後、前記第１計算機が、前記書き込まれたデータを前記記憶装置から読み出して、前記読み出されたデータを、前記ネットワークを介して送信する手順を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第２計算機又は前記記憶装置は、複数のウィルスのパターンを保持し、
前記読み出されたデータのウィルススキャンの一部を実行する手順は、
前記第２計算機が、前記複数のパターンの一部と、前記読み出されたデータとを照合することによって実行され、
前記第２計算機は、前記ウィルススキャンの進捗を示す情報を含む管理情報を保持し、
前記読み出されたデータのウィルススキャンの残りを実行する手順は、前記第２計算機が、前記管理情報に基づいて、前記複数のパターンのうち照合が終了した前記一部を除く残りの部分と、前記読み出されたデータとを照合することによって実行されることを特徴とする請求項１０に記載の方法。
【請求項１３】
前記方法は、さらに、
前記第１計算機が、所定の時間内に前記ネットワークを介して受信した全アクセス要求の数に対する書き込み要求の数及び読み出し要求の数の比率を算出する手順と、
前記第１計算機が、前記算出された比率を前記第２計算機に送信する手順と、を含み、
前記読み出されたデータのウィルススキャンの一部を実行する手順は、
前記書き込み要求の数の比率が前記読み出し要求の数の比率より高い場合、前記第２計算機が、前記複数のパターンの総数の半分より少ない数の前記パターンと、前記読み出されたデータとを照合することによって実行され、
前記書き込み要求の数の比率が前記読み出し要求の数の比率より低い場合、前記第２計算機が、前記複数のパターンの総数の半分より多い数の前記パターンと、前記読み出されたデータとを照合することによって実行されることを特徴とする請求項１２に記載の方法。
【請求項１４】
前記方法は、さらに、
前記第２計算機が、前記算出された比率を受信すると、前記受信した最新の比率と、前回以前に受信した前記比率とを比較する手順と、
前記受信した最新の比率が示す前記読み出し要求の数の比率が、前回以前に受信した前記比率が示す前記読み出し要求の数の比率より高い場合、前記第２計算機が、照合が終了した前記一部を除く残りの前記パターンのうち少なくとも一つの前記パターンと、前記読み出されたデータとを照合する手順と、を含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記第２計算機又は前記記憶装置は、さらに、前記各ウィルスの危険度を示す情報を保持し、
前記複数のパターンは、第１のウィルスのパターンである第１パターン、及び、第２のウィルスのパターンである第２パターンを含み、
前記方法は、さらに、
前記第２計算機が、前記各ウィルスの危険度を示す情報に基づいて前記第１のウィルス及び前記第２のウィルスの危険度を判定する手順と、
前記第１のウィルスの危険度が前記第２のウィルスの危険度より高い場合、前記第２計算機が、前記第２パターンと前記読み出されたデータとを照合する前に、前記第１パターンと前記読み出されたデータとを照合する手順と、を含むことを特徴とする請求項１２に記載の方法。
【請求項１６】
前記方法は、さらに、
前記第２計算機が、前記パターンが新たに追加されたか否かを判定し、
前記パターンが新たに追加された場合、前記第２計算機が、照合が終了した前記一部を除く残りの前記パターンのうち前記追加されたパターンの数と同数の前記パターンと、前記読み出されたデータとを照合する手順と、を含むことを特徴とする請求項１２に記載の方法。
【請求項１７】
前記第２計算機又は前記記憶装置は、少なくとも一つのウィルスのパターンを保持し、
前記読み出されたデータのウィルススキャンの一部を実行する手順は、前記第２計算機が、前記パターンと、前記読み出されたデータの一部とを照合することによって実行され、
前記第２計算機は、前記ウィルススキャンの進捗を示す情報を含む管理情報を保持し、
前記読み出されたデータのウィルススキャンの残りを実行する手順は、前記第２計算機が、前記管理情報に基づいて、前記パターンと、前記データのうち照合が終了した前記一部を除く残りの部分とを照合することによって実行されることを特徴とする請求項１０に記載の方法。
【請求項１８】
前記方法は、さらに、
前記第２計算機が、前記読み出されたデータのウィルススキャンの一部が終了すると、前記第２プロセッサの使用率を所定の閾値と比較する手順と、
前記第２プロセッサの使用率が前記所定の閾値より低い場合、前記第２計算機が、前記読み出されたデータのウィルススキャンの残りを実行する手順と、を含むことを特徴とする請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で開示される技術は、ストレージシステムの管理方法に関し、特に、いわゆるＮＡＳにおけるウィルススキャン方法に関する。
【背景技術】
【０００２】
ネットワークに接続されたストレージシステムを、そのネットワークに接続された複数のクライアント計算機の共有ディスクとして使用する、ネットワーク接続ストレージ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ、ＮＡＳ）が知られている。ＮＡＳは、ネットワークインターフェース等を含むＮＡＳサーバと、データを格納するディスク装置とによって構成される。
【０００３】
ＮＡＳにおいてコンピュータウィルス感染による被害を回避するために、スキャンサーバを用いたウィルススキャンの技術が開示されている（特許文献１参照）。スキャンサーバとは、ネットワークに接続された、ウィルススキャンを実行する計算機である。具体的には、ＮＡＳサーバがクライアント計算機からファイル操作を受け付けると、ＮＡＳサーバはスキャンサーバに操作対象のファイルを転送する。ファイル操作とは、ファイルの書き込み又はファイルの読み出しである。操作対象のファイルとは、これからディスク装置に書き込まれるファイル又はディスク装置から読み出されたファイルである。
【０００４】
スキャンサーバは、転送されたファイルのウィルススキャンを実行し、その結果をＮＡＳサーバに応答する。さらに、スキャンサーバは、転送されたファイルがウィルスに感染していた場合、そのファイルを修復して、修復されたファイル（すなわち、ウィルスを取り除かれたファイル）をＮＡＳサーバに転送する。ＮＡＳサーバは、スキャンサーバからの応答に従って、ファイル操作を実行する。このように、ＮＡＳサーバが取り扱うファイルのウィルスチェック及び修復が実行されるため、ウィルス感染による被害が防止される。
【特許文献１】特開２００４−１９９２１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記のように、ＮＡＳサーバがファイル操作を受け付けた後、そのファイル操作が実行され、その結果がクライアント計算機に応答されるまでの間に、ファイルの転送及びウィルススキャンが実行される。ファイルサイズが大きい場合、これらの転送及びウィルススキャンに要する時間が長くなるため、クライアント計算機とＮＡＳサーバとの間のセッションがタイムアウトする場合がある。サイズが大きいファイルのウィルススキャンの少なくとも一部を実行しなければ、このようなタイムアウトを防ぐことができるが、その場合、スキャン漏れによってウィルス感染が拡大するおそれがある。
【課題を解決するための手段】
【０００６】
本願で開示する代表的な発明は、第１計算機と、ネットワークを介して前記第１計算機に接続される第２計算機と、前記第１計算機及び前記第２計算機に接続される記憶装置と、を備える計算機システムであって、前記第１計算機は、前記ネットワークに接続される第１インターフェースと、前記第１インターフェースに接続される第１プロセッサと、前記第１プロセッサに接続される第１メモリと、を備え、前記第２計算機は、前記ネットワークに接続される第２インターフェースと、前記第２インターフェースに接続される第２プロセッサと、前記第２プロセッサに接続される第２メモリと、を備え、前記記憶装置は、データの記憶領域を提供する記憶媒体と、前記第１計算機及び前記第２計算機に接続され、前記記憶領域へのデータの書き込み及び読み出しを制御するコントローラと、を備え、前記第１計算機は、前記ネットワークを介してデータの書き込み要求を受信すると、前記書き込まれるべきデータを前記記憶装置に書き込み、前記書き込まれたデータのウィルススキャン要求を前記第２計算機に送信し、前記第２計算機は、前記第１計算機から前記ウィルススキャン要求を受信すると、前記書き込まれたデータを前記記憶装置から読み出し、前記読み出されたデータのウィルススキャンの一部を実行し、前記第１計算機は、前記読み出されたデータのウィルススキャンの一部が終了した後、前記受信した書き込み要求に対する応答を送信し、前記第２計算機は、前記第１計算機が前記応答を送信した後、前記読み出されたデータのウィルススキャンの残りを実行することを特徴とする。
【発明の効果】
【０００７】
本発明の一実施形態によれば、ウィルス感染による被害を防止しながら、応答レスポンスを向上させ、タイムアウトの発生を防ぐことができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施形態を、図面を参照して説明する。
【０００９】
図１は、本発明の実施形態の計算機システムの構成を示すブロック図である。
【００１０】
本実施形態の計算機システムは、複数のクライアント１７０、スキャンサーバ１００、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）サーバ１２０及びディスクサブシステム１４０を備える。複数のクライアント１７０、スキャンサーバ１００及びＮＡＳサーバ１２０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１８０を介して相互に接続される。スキャンサーバ１００、ＮＡＳサーバ１２０及びディスクサブシステム１４０は、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）スイッチ１６０を介して相互に接続される。
【００１１】
スキャンサーバ１００は、ファイルのウィルススキャンを実行する計算機である。以下の説明において、ウィルススキャンを単にスキャンとも記載する。
【００１２】
スキャンサーバ１００は、相互に接続されたＩ／Ｆ１０１、ＣＰＵ１０３、Ｉ／Ｆ１０４及びメモリ１０２を備える。
【００１３】
Ｉ／Ｆ１０１は、スキャンサーバ１００をＬＡＮ１８０に接続するインターフェースである。スキャンサーバ１００は、ＬＡＮ１８０に接続された装置（例えばクライアント１７０又はＮＡＳサーバ１２０）と、Ｉ／Ｆ１０１を介して通信する。Ｉ／Ｆ１０１は、例えば、いわゆるネットワークインターフェースカード（ＮＩＣ）である。
【００１４】
ＣＰＵ１０３は、メモリ１０２に格納されたプログラムを実行するプロセッサである。したがって、以下の説明においてメモリ１０２に格納されたプログラム（例えば、後述するウィルススキャンエンジン１０５）が実行する処理は、実際には、ＣＰＵ１０３によって実行される。
【００１５】
Ｉ／Ｆ１０４は、スキャンサーバ１００をＦＣスイッチ１６０に接続するインターフェースである。スキャンサーバ１００は、Ｉ／Ｆ１０４を介してディスクサブシステム１４０と通信する。Ｉ／Ｆ１０４は、例えば、いわゆるホストバスアダプタ（ＨＢＡ）である。
【００１６】
メモリ１０２は、例えば半導体メモリであり、ＣＰＵ１０３によって実行されるプログラム及びＣＰＵ１０３によって参照されるデータ等を格納する。本実施形態のメモリ１０２は、ＣＰＵ１０３によって実行されるプログラムとして、少なくとも、ウィルススキャンエンジン１０５、カーネル／ファイルシステム１０６及びデバイスドライバ１０７を格納する。カーネル／ファイルシステム１０６及びデバイスドライバ１０７は、スキャンサーバ１００において稼動するＯＳ（オペレーティングシステム）（図示省略）の一部として提供される。
【００１７】
ウィルススキャンエンジン１０５は、ウィルスのパターンが定義されたパターン定義ファイル（後述）と、スキャン対象のファイルとを照合することによって、ファイルがウィルスに感染しているか否かを判定するプログラムである。
【００１８】
本実施形態のウィルススキャンエンジン１０５は、スキャン要求受付処理部１０８、通知情報受付処理部１０９及びパターン定義監視処理部１１０を含む。これらの各処理部は、ウィルススキャンエンジン１０５に含まれるプログラムモジュールである。
【００１９】
カーネル／ファイルシステム１０６は、ＯＳの基本機能を実装するソフトウェア（すなわち、いわゆるカーネル）、及び、ディスクサブシステム１４０に格納されているデータを管理するソフトウェア（すなわち、いわゆるファイルシステム）を含む。ファイルシステムは、上位層に対して階層構造化された論理ビュー（ディレクトリ、ファイル等）を提供するとともに、これらのビューを物理的なデータ構造（ブロックデータ、ブロックアドレス）に変換して下位層に対するＩ／Ｏ処理を実行する。
【００２０】
デバイスドライバ１０７は、カーネル／ファイルシステム１０６から要求されたブロックＩ／Ｏを実行する。
【００２１】
ＮＡＳサーバ１２０は、ディスクサブシステム１４０をＬＡＮ１８０に接続するための計算機である。図１においてＮＡＳサーバ１２０は、単に「ＮＡＳ  １２０」と記載される。
【００２２】
ＮＡＳサーバ１２０は、相互に接続されたＩ／Ｆ１２１、ＣＰＵ１２３、Ｉ／Ｆ１２４及びメモリ１２２を備える。
【００２３】
Ｉ／Ｆ１２１は、ＮＡＳサーバ１２０をＬＡＮ１８０に接続するインターフェースである。ＮＡＳサーバ１２０は、ＬＡＮ１８０に接続された装置（例えばクライアント１７０又はスキャンサーバ１００）と、Ｉ／Ｆ１２１を介して通信する。Ｉ／Ｆ１２１は、例えばＮＩＣである。
【００２４】
ＣＰＵ１２３は、メモリ１２２に格納されたプログラムを実行するプロセッサである。したがって、以下の説明においてメモリ１２２に格納されたプログラム（例えば、後述するファイル共有プログラム１２５）が実行する処理は、実際には、ＣＰＵ１２３によって実行される。
【００２５】
Ｉ／Ｆ１２４は、ＮＡＳサーバ１２０をＦＣスイッチ１６０に接続するインターフェースである。ＮＡＳサーバ１２０は、Ｉ／Ｆ１２４を介してディスクサブシステム１４０と通信する。Ｉ／Ｆ１２４は、例えばＨＢＡである。
【００２６】
メモリ１２２は、例えば半導体メモリであり、ＣＰＵ１２３によって実行されるプログラム及びＣＰＵ１２３によって参照されるデータ等を格納する。本実施形態のメモリ１２２は、ＣＰＵ１２３によって実行されるプログラムとして、少なくとも、ファイル共有プログラム１２５、カーネル／ファイルシステム１２６及びデバイスドライバ１２７を格納する。カーネル／ファイルシステム１２６及びデバイスドライバ１２７は、ＮＡＳサーバ１２０において稼動するＯＳ（図示省略）の一部として提供される。カーネル／ファイルシステム１２６及びデバイスドライバ１２７は、それぞれ、カーネル／ファイルシステム１０６及びデバイスドライバ１０７と同様であるため、これらの説明を省略する。
【００２７】
ファイル共有プログラム１２５は、ＬＡＮ１８０に接続されるクライアント１７０にファイル共有プロトコルを提供することによって、複数のクライアント１７０によるファイル共有機能を提供する。提供されるファイル共有プロトコルは、例えば、ＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）又はＣＩＦＳ（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）であってもよい。ファイル共有プログラム１２５は、クライアント１７０からファイル単位のＩ／Ｏ（すなわち読み出し又は書き込み）要求を受けると、その要求に対応したファイル単位のＩ／Ｏをファイルシステム（後述）に対して実行する。
【００２８】
本実施形態のファイル共有プログラム１２５は、書き込み（ｗｒｉｔｅ）要求受付処理部１２８、読み出し（ｒｅａｄ）要求受付処理部１２９及びＮＡＳアクセス情報取得処理部１３０を含む。これらの各処理部は、ファイル共有プログラム１２５に含まれるプログラムモジュールである。
【００２９】
ディスクサブシステム１４０は、クライアント１７０からの書き込み要求を受信したＮＡＳサーバ１２０によって書き込まれたデータを格納する記憶装置である。本実施形態のディスクサブシステム１４０は、コントローラ１４１及び一つ以上のディスクドライブ１４７を備える。
【００３０】
ディスクドライブ１４７は、データの記憶領域を提供する記憶媒体を備える装置である。ディスクドライブ１４７は、例えば、磁気ディスクを記憶媒体として備えるハードディスクドライブ（ＨＤＤ）であってもよいが、他の種類の装置（例えば、半導体メモリを記憶媒体として備える、フラッシュメモリ等の半導体記憶装置）であってもよい。ディスクサブシステム１４０は、複数のディスクドライブ１４７を備えてもよい。図１に示すディスクドライブ１４７Ａ〜１４７Ｄの各々は、複数のディスクドライブ１４７の一つである。
【００３１】
複数のディスクドライブ１４７は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成してもよい。クライアント１７０によって書き込まれたデータは、最終的に、ディスクドライブ１４７が提供する物理的な記憶領域に格納される。
【００３２】
論理ボリューム（ＬＵ）１４８は、ＮＡＳサーバ１２０によって論理的なディスクドライブとして扱われる領域である。ＬＵ１４８の論理的な記憶領域は、ディスクドライブ１４７の物理的な記憶領域と対応付けられる。一つのＬＵ１４８の論理的な記憶領域は、一つのディスクドライブ１４７の物理的な記憶領域と対応付けられてもよいし、複数のディスクドライブ１４７の物理的な記憶領域と対応付けられてもよい。
【００３３】
本実施形態のディスクサブシステム１４０は、複数のＬＵ１４８を含む。図１に示すＬＵ１４８Ａ〜１４８Ｃの各々は、複数のＬＵ１４８の一つである。
【００３４】
図１の例において、ＬＵ１４８Ａは、ユーザファイル１４９を格納するユーザＬＵである。ユーザファイル１４９は、クライアント１７０のアプリケーション（図示省略）によって作成されたファイルである。実際には、ユーザファイル１４９を構成するデータが、ＬＵ１４８Ａに含まれる複数のブロックに格納される。ブロックとは、固定長の記憶領域である。
【００３５】
ユーザファイル１４９の識別子（すなわちファイル名）と、そのユーザファイル１４９を構成するデータが格納されるブロックのアドレスとの対応関係は、カーネル／ファイルシステム１２６によって管理される。スキャンサーバ１００も、カーネル／ファイルシステム１２６と同様のカーネル／ファイルシステム１０６を備える。このため、スキャンサーバ１００も、ファイル名に基づいてユーザファイル１４９にアクセスすることができる。
【００３６】
なお、図１には一つのユーザファイル１４９のみを示すが、実際のＬＵ１４８Ａは、任意の数のユーザファイルを格納する。
【００３７】
ＬＵ１４８Ｂ及びＬＵ１４８Ｃは、ＯＳを格納するＯＳ−ＬＵである。ＬＵ１４８Ｂは、スキャンサーバ１００で稼動するＯＳを格納し、ＬＵ１４８Ｃは、ＮＡＳサーバ１２０で稼動するＯＳを格納する。
【００３８】
具体的には、ＬＵ１４８Ｂは、図１では省略されているが、ウィルススキャンエンジン１０５、カーネル／ファイルシステム１０６及びデバイスドライバ１０７を格納する。スキャンサーバ１００は、ＬＵ１４８Ｂを使用して起動（ブート）する。スキャンサーバ１００が起動した後、必要に応じて、ウィルススキャンエンジン１０５等がメモリ１０２にコピーされてもよい。さらに、ＬＵ１４８Ｂは、パターン定義ファイル１５０を格納する。パターン定義ファイル１５０については後述する（図２参照）。パターン定義ファイル１５０がメモリ１０２にコピーされてもよい。
【００３９】
ＬＵ１４８Ｃは、図１では省略されているが、ファイル共有プログラム１２５、カーネル／ファイルシステム１２６及びデバイスドライバ１２７を格納する。ＮＡＳサーバ１２０は、ＬＵ１４８Ｃを使用して起動する。ＮＡＳサーバ１２０が起動した後、必要に応じて、ファイル共有プログラム１２５等がメモリ１２２にコピーされてもよい。
【００４０】
コントローラ１４１は、ディスクサブシステム１４０を制御する制御装置である。本実施形態のコントローラ１４１は、相互に接続されたＩ／Ｆ１４２、ＣＰＵ１４４、Ｉ／Ｆ１４６及びキャッシュメモリ１４５を備える。
【００４１】
Ｉ／Ｆ１４２は、コントローラ１４１をＦＣスイッチ１６０に接続するインターフェースである。コントローラ１４１は、Ｉ／Ｆ１４２を介して、ＦＣスイッチ１６０に接続されたＮＡＳサーバ１２０等と通信する。
【００４２】
ＣＰＵ１４４は、ディスクサブシステム１４０を制御するためのプログラムを実行するプロセッサである。
【００４３】
Ｉ／Ｆ１４６は、コントローラ１４１をディスクドライブ１４７に接続するインターフェースである。コントローラ１４１は、Ｉ／Ｆ１４６を介して、ディスクドライブ１４７へのデータの書き込み及び読み出しを実行する。
【００４４】
キャッシュメモリ１４５は、ディスクドライブ１４７に書き込まれるデータ及びディスクドライブ１４７から読み出されるデータを一時的に格納する半導体メモリである。
【００４５】
ＦＣスイッチ１６０は、ＮＡＳサーバ１２０、スキャンサーバ１００及びディスクサブシステム１４０の間のＦＣプロトコルによる通信を媒介する。具体的には、ＦＣスイッチ１６０は、Ｉ／Ｆ１０４、Ｉ／Ｆ１２４及びＩ／Ｆ１４２に接続され、これらの任意のＩ／Ｆ間に通信経路を設定することができる。
【００４６】
なお、ＦＣスイッチ１６０は、他の種類のネットワークによって置き換えられてもよい。例えば、ＦＣスイッチ１６０は、ＬＡＮ１８０によって置き換えられてもよい。
【００４７】
クライアント１７０は、各種アプリケーションを実行する計算機である。本実施形態の計算機システムは、任意の数のクライアント１７０を備えてもよい。図１に示すクライアント１７０Ａ及びクライアント１７０Ｂの各々は、複数のクライアント１７０の一つである。
【００４８】
各クライアント１７０は、アプリケーションプログラムを実行するＣＰＵ（図示省略）、ＬＡＮ１８０に接続されるＩ／Ｆ（図示省略）、及び、少なくともアプリケーションプログラムを格納するメモリ（図示省略）を備える。
【００４９】
ＬＡＮ１８０は、任意の種類のネットワークによって置き換えられてもよい。例えば、ＬＡＮ１８０は、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）によって置き換えられてもよいし、ＬＡＮとＷＡＮが混在するネットワークによって置き換えられてもよい。
【００５０】
図２は、本発明の実施形態のパターン定義ファイル１５０の説明図である。
【００５１】
パターン定義ファイル１５０は、ウィルスの特徴を示すデータパターン、及び、そのパターンを管理するための情報を含むファイルである。本実施形態のパターン定義ファイル１５０は、共通部２００及びパターン定義部２１０を含む。
【００５２】
共通部２００は、パターン定義ファイルバージョン２０１、前パターン定義ファイルバージョン２０２、パターン数２０３及び追加パターン数２０４を含む。
【００５３】
パターン定義ファイルバージョン２０１は、現在のパターン定義ファイル１５０のバージョン、すなわち、現在パターン定義部２１０に格納されているパターン定義のバージョンを示す。パターン定義ファイルバージョン２０１として格納されている値が大きいほど、バージョンが新しいことを示す。
【００５４】
前パターン定義ファイルバージョン２０２は、現在のパターン定義ファイル１５０のバージョンの一つ前のバージョンを示す。具体的には、パターン定義ファイル１５０が更新されるとき、更新前のバージョン（図２の例では「１．５」）が前パターン定義ファイルバージョン２０２に格納され、更新後のバージョン（図２の例では「２」）がパターン定義ファイルバージョン２０１に格納される。
【００５５】
パターン数２０３は、パターン定義ファイルにおいて定義されているパターンの数を示す。
【００５６】
追加パターン数２０４は、パターン定義ファイル１５０が現在のバージョンに更新されたときに新たに追加されたパターンの数を示す。
【００５７】
図２の例では、パターン数２０３及び追加パターン数２０４としてそれぞれ「１５０」及び「２」が格納されている。これらは、現在のバージョン「２」において定義されているパターンの数が１５０であること、及び、バージョン「１．５」から「２」に更新されるときに新たに２パターンが追加されたことを示す。
【００５８】
パターン定義部２１０は、パターン番号２１１、パターン名称２１２、パターン２１３及び追加フラグ２１４を含む。
【００５９】
パターン番号２１１は、パターン定義ファイル１５０において定義されているパターンに付与された番号である。
【００６０】
パターン名称２１２は、ウィルスの名称、すなわち、そのウィルスの特徴を示すデータパターンの名称である。
【００６１】
パターン２１３は、そのウィルスの特徴を示すデータパターンである。ファイルのスキャンは、そのファイルのデータと、パターン２１３として格納されているデータパターンとを照合することによって実行される。
【００６２】
追加フラグ２１４は、パターン定義ファイル１５０が一つ前のバージョンから現在のバージョンに更新されたときに新たに追加されたパターンを示す。追加フラグ２１４の値「ＯＮ」に対応するパターン２１３は、新たに追加されたパターンである。
【００６３】
図２の例では、パターン番号２１１の値「１４９」に対応するパターン名称２１２、パターン２１３及び追加フラグ２１４として、それぞれ、「Ｖｉｒｕｓ−Ｙ」、「００１２４５８ＦＥＡ４５９５６９・・・」及び「ＯＦＦ」が格納されている。これらは、ウィルス「Ｖｉｒｕｓ−Ｙ」の特徴を示すデータパターンが「００１２４５８ＦＥＡ４５９５６９・・・」であること、及び、そのパターンが、現在のバージョン「２」において新たに追加されたことを示す。
【００６４】
パターン定義ファイル１５０は、例えば、ウィルス対策ソフトウェアのベンダー等によって提供されてもよい。例えば、随時、新しいバージョンのパターン定義ファイル１５０がベンダー等によって提供される。その場合、新しいバージョンが提供される度に、パターン定義ファイル１５０がその新しいバージョンに更新される。
【００６５】
図３は、本発明の実施形態のスキャン進捗管理テーブル３００の説明図である。
【００６６】
スキャン進捗管理テーブル３００は、ウィルススキャンエンジン１０５による各ファイルのスキャンの進捗を管理するために使用される。スキャン進捗管理テーブル３００は、例えばウィルススキャンエンジン１０５の一部としてスキャンサーバ１００のメモリ１０２に格納されてもよい。
【００６７】
スキャン進捗管理テーブル３００は、項番３０１、ファイル名３０２、完了／未完識別３０３、ｗｒｉｔｅ時スキャン情報３０４、ｒｅａｄ時スキャン情報３０８及び再開ポイント３１２を含む。
【００６８】
スキャン進捗管理テーブル３００の各エントリ（すなわち各行）は、ウィルススキャンエンジン１０５によってスキャンされる各ファイルに対応する。
【００６９】
項番３０１は、各エントリに付与された番号である。
【００７０】
ファイル名３０２は、スキャンされるファイルを識別する名称である。ファイル名３０２は、例えば「／ｄｉｒ−ａ／ａａａ．ｔｘｔ」のようなパスであってもよい。
【００７１】
完了／未完識別３０３は、各ファイルのスキャンが完了したか否かを示す。「未完」はスキャンが完了していないことを、「完了」はスキャンが完了したことを示す。
【００７２】
本実施形態において、各ファイルのスキャンは、分割して実行される場合がある。例えば、図２に示すようにパターン定義ファイル１５０において１５０個のパターンが定義されている場合、ファイルを書き込むときに７５個のパターンを用いたスキャンが実行され、そのファイルを読み出すときに残りの７５個のパターンを用いたスキャンが実行されてもよい。一つのファイルのスキャンが「完了した」ことは、そのファイルについて、定義されている全てのパターンを用いたスキャンが終了したことを意味する。この場合、そのファイルに対応する完了／未完識別３０３に「完了」が格納される。一方、例えば、ファイルを書き込むときの７５個のパターンを用いたスキャンのみが終了し、残りの７５個のパターンを用いたスキャンが終了していない場合、そのファイルに対応する完了／未完識別３０３に「未完」が格納される。
【００７３】
ｗｒｉｔｅ時スキャン情報３０４は、ファイルが書き込まれたときにそのファイルを対象として実行されたスキャンの進捗を管理する情報である。具体的には、ｗｒｉｔｅ時スキャン情報３０４は、さらに終了日時３０５、進捗度３０６及び適用バージョン３０７を含む。なお、ファイルが書き込まれたときにそのファイルを対象として実行されたスキャンとは、後述する図６のステップ６０３において実行されたスキャンを意味する。
【００７４】
終了日時３０５は、ファイルが書き込まれたときに実行されたスキャンが終了した日時を示す。
【００７５】
進捗度３０６は、ファイルが書き込まれたときに実行されたスキャンに使用された最後のパターンの番号を示す。言い換えると、進捗度３０６は、そのファイルをスキャンするために既に使用されたパターンを識別する情報を示す。この番号は、図２のパターン番号２１１に対応する。例えば、ファイルが書き込まれたときに７５個のパターンを用いたスキャンが終了した場合、進捗度３０６に「＃７５」が格納される。これは、ファイルが書き込まれたときに、図２のパターン番号２１１の値「１」から「７５」までのパターンを用いたスキャンが終了したことを意味する。
【００７６】
適用バージョン３０７は、ファイルが書き込まれたときに実行されたスキャンに使用されたパターン定義ファイル１５０のバージョン（すなわち、パターン定義ファイルバージョン２０１の値）を示す。
【００７７】
ｒｅａｄ時スキャン情報３０８は、ファイルが読み出されたときにそのファイルを対象として実行されたスキャンの進捗を管理する情報である。具体的には、ｒｅａｄ時スキャン情報３０８は、さらに終了日時３０９、進捗度３１０及び適用バージョン３１１を含む。なお、ファイルが読み出されたときにそのファイルを対象として実行されたスキャンとは、後述する図７のステップ７０２において実行されたスキャンを意味する。
【００７８】
ただし、あるエントリに対応するファイルがまだ一度も読み出されていない場合、ファイルが読み出されるときのスキャンがまだ実行されていない。したがってこの場合、そのエントリのｒｅａｄ時スキャン情報３０８として有効な値が登録されなくてもよい。
【００７９】
終了日時３０９は、ファイルが読み出されたときに実行されたスキャンが終了した日時を示す。
【００８０】
進捗度３１０は、ファイルが読み出されたときに実行されたスキャンに使用された最後のパターンの番号を示す。この番号は、図２のパターン番号２１１に対応する。例えば、ファイルが書き込まれたときに７５個のパターンを用いたスキャンが終了し、その後、ファイルが読み出されたときに残り７５個のパターンを用いたスキャンが終了した場合、進捗度３０６に「＃１５０」が格納される。これは、ファイルが読み出されたときに、図２のパターン番号２１１の値「７６」から「１５０」までのパターンを用いたスキャンが終了したことを意味する。
【００８１】
適用バージョン３１１は、ファイルが読み出されたときに実行されたスキャンに使用されたパターン定義ファイル１５０のバージョン（すなわち、パターン定義ファイルバージョン２０１の値）を示す。
【００８２】
再開ポイント３１２には、まだ全てのパターンを用いたスキャンが終了していない場合、残りのパターンのうち先頭のパターンの番号が格納される。例えば、ファイルが書き込まれたときに７５個のパターンを用いたスキャンが終了し、その後、そのファイルがまだ読み出されていない場合、パターン番号２１１の値「７６」から「１５０」までのパターンを用いたスキャンがまだ終了していない。この場合、残りのパターンのうち先頭のパターンの番号「７６」が再開ポイント３１２に格納される。
【００８３】
図４は、本発明の実施形態のアクセスログ４００の説明図である。
【００８４】
アクセスログ４００は、ＮＡＳサーバ１２０がクライアント１７０からアクセス要求（すなわち書き込み要求又は読み出し要求）を受信する度に、ファイル共有プログラム１２５によって取得される。アクセスログ４００は、例えば、ＮＡＳアクセス情報取得処理部１３０の一部としてメモリ１２２に格納されてもよい。
【００８５】
アクセスログ４００は、日時４０１、アクセス先４０２、アクセスファイル４０３及びアクセス種別４０４を含む。
【００８６】
日時４０１は、ＮＡＳサーバ１２０がアクセス要求を受信した日時を示す。
【００８７】
アクセス先４０２は、受信したアクセス要求を送信したクライアント１７０の識別子を示す。
【００８８】
アクセスファイル４０３は、受信したアクセス要求によって指定されたファイル、すなわち、アクセス対象であるファイルの識別子を示す。
【００８９】
アクセス種別４０４は、要求されたアクセスの種類を示す。具体的には、アクセス種別４０４は、要求されたアクセスがファイルの読み出し（ｒｅａｄ）又は書き込み（ｗｒｉｔｅ）のいずれであるかを示す。要求されたアクセスが書き込みである場合、アクセス種別４０４はさらに、要求された書き込みが新規書き込みであるか、既存のファイルの更新書き込みであるかを示す情報を含んでもよい。
【００９０】
図５は、本発明の実施形態の通知済み情報５００の説明図である。
【００９１】
ＮＡＳサーバ１２０は、取得したアクセスログ４００に基づいて、アクセスの統計情報を作成する。そして、ＮＡＳサーバ１２０は、作成した統計情報をスキャンサーバ１００に送信する。通知済み情報５００は、このようにして送信されたアクセスの統計情報を含む。
【００９２】
例えば、通知済み情報５００は、ＮＡＳアクセス情報取得処理部１３０の一部としてＮＡＳサーバ１２０のメモリ１２２に格納されてもよい。さらに、通知済み情報５００は、通知情報受付処理部１０９の一部としてスキャンサーバ１００のメモリ１０２に格納されてもよい。
【００９３】
通知済み情報５００は、日時５０１、ｒｅａｄ比率５０２、ｗｒｉｔｅ比率５０３及び送信日時５０４を含む。
【００９４】
日時５０１は、ｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３に格納された統計情報の基礎となったアクセス要求を受信した時間帯を示す。
【００９５】
ｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３は、アクセスログ４００に基づいて作成された統計情報である。具体的には、ｒｅａｄ比率５０２は、日時５０１が示す時間帯にＮＡＳサーバ１２０が受信したアクセス要求の数のうち、読み出し要求の数が占める割合を示す。ｗｒｉｔｅ比率５０３は、日時５０１が示す時間帯にＮＡＳサーバ１２０が受信したアクセス要求の数のうち、書き込み要求の数が占める割合を示す。
【００９６】
送信日時５０４は、ｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３として格納された統計情報がＮＡＳサーバ１２０からスキャンサーバ１００に送信された日時を示す。
【００９７】
図５の例では、日時５０１の値「２００７／７／７  １０：００〜１１：００」に対応するｒｅａｄ比率５０２、ｗｒｉｔｅ比率５０３及び送信日時５０４として、それぞれ、「３０％」、「７０％」及び「２００７／７／７  １１：３０：００」が格納されている。これは、２００７年７月７日１０：００から１１：００までの１時間の間にＮＡＳサーバ１２０が受信したアクセス要求のうち３０％が読み出し要求、７０％が書き込み要求であったこと、及び、この統計情報が２００７年７月７日１１：３０：００にＮＡＳサーバ１２０からスキャンサーバ１００に送信されたことを示す。
【００９８】
次に、本実施形態の計算機システムの各部が実行する処理について、フローチャートを参照して説明する。
【００９９】
図６は、本発明の実施形態のＮＡＳサーバ１２０のｗｒｉｔｅ要求受付処理部１２８の処理を示すフローチャートである。
【０１００】
図６に示す処理は、ＮＡＳサーバ１２０がクライアント１７０から書き込み（ｗｒｉｔｅ）要求を受信したときに開始される。この処理は、ＣＰＵ１２３がｗｒｉｔｅ要求受付処理部１２８を実行することによって実現される。
【０１０１】
ＮＡＳサーバ１２０がクライアント１７０から書き込み要求を受信すると、ｗｒｉｔｅ要求受付処理部１２８を実行するＣＰＵ１２３は、受信した書き込み要求によって指定されたファイル（すなわち、その書き込み要求によって書き込まれるべきファイル）をファイルシステムに書き込む（ステップ６０１）。このとき、カーネル／ファイルシステム１２６が、指定されたファイルに対応するＬＵ１４８の一つ以上のブロックに、指定されたファイルに含まれるデータを書き込む。
【０１０２】
次に、ＣＰＵ１２３は、スキャンサーバ１００にファイルのスキャン要求を送信する（ステップ６０２）。このスキャン要求には、ステップ６０１で書き込まれたファイルを識別するファイル名が含まれる。
【０１０３】
スキャン要求を受信したスキャンサーバ１００は、スキャン要求受付処理部１０８を呼び出し、スキャンを実行する（ステップ６０３）。このとき実行されるスキャンについては、後で詳細に説明する（図９参照）。
【０１０４】
スキャンサーバ１００によるスキャンが終了すると（具体的には、ＮＡＳサーバ１２０が後述する図９のステップ９１０に示す通知を受信すると）、ＣＰＵ１２３は、書き込み要求の送信元であるクライアント１７０に、書き込み処理が終了したことを示す応答を送信する（ステップ６０４）。
【０１０５】
以上で、図６に示す処理が終了する。
【０１０６】
図７は、本発明の実施形態のＮＡＳサーバ１２０のｒｅａｄ要求受付処理部１２９の処理を示すフローチャートである。
【０１０７】
図７に示す処理は、ＮＡＳサーバ１２０がクライアント１７０から読み出し（ｒｅａｄ）要求を受信したときに開始される。この処理は、ＣＰＵ１２３がｒｅａｄ要求受付処理部１２９を実行することによって実現される。
【０１０８】
ＮＡＳサーバ１２０がクライアント１７０から読み出し要求を受信すると、ｒｅａｄ要求受付処理部１２９を実行するＣＰＵ１２３は、スキャンサーバ１００にファイルのスキャン要求を送信する（ステップ７０１）。このスキャン要求には、受信した読み出し要求によって指定されたファイル名が含まれる。
【０１０９】
スキャン要求を受信したスキャンサーバ１００は、スキャン要求受付処理部１０８を呼び出し、スキャンを実行する（ステップ７０２）。このとき実行されるスキャンについては、後で詳細に説明する（図９参照）。
【０１１０】
スキャンサーバ１００によるスキャンが終了すると（具体的には、ＮＡＳサーバ１２０が後述する図９のステップ９１０に示す通知を受信すると）、ＣＰＵ１２３は、受信した読み出し要求によって指定されたファイルをＬＵ１４８から読み出して、読み出したファイルをクライアント１７０に返す（ステップ７０３）。このとき、カーネル／ファイルシステム１２６が、指定されたファイルに対応するＬＵ１４８の一つ以上のブロックから、指定されたファイルに含まれるデータを読み出す。
【０１１１】
以上で、図７に示す処理が終了する。
【０１１２】
ここで、既にＬＵ１４８に格納されているファイルを更新する処理について説明する。
【０１１３】
格納されているファイルを更新するためには、格納されているファイルを一旦読み出す必要がある。このため、クライアント１７０は、これから更新しようとするファイルを指定した読み出し要求をＮＡＳサーバ１２０に送信する。ＮＡＳサーバ１２０は、図７に示す処理を実行することによって、指定されたファイルを読み出して、クライアント１７０に応答する。クライアント１７０は、読み出されたファイルを更新し、その更新されたファイルを書き込むための書き込み要求をＮＡＳサーバ１２０に送信する。ＮＡＳサーバ１２０は、図６に示す処理を実行することによって、指定されたファイルをＬＵ１４８に書き込む。
【０１１４】
このように、ＬＵ１４８に格納されているファイルが更新される場合、更新書き込みの前に必ずそのファイルが読み出される。言い換えると、ＮＡＳサーバ１２０は、あるファイルを対象とする書き込み要求を受信した後、そのファイルを対象とする次回の書き込み要求を受信する前に、そのファイルを対象とする読み出し要求を必ず受信する。
【０１１５】
図８は、本発明の実施形態のＮＡＳサーバ１２０のＮＡＳアクセス情報取得処理部１３０の処理を示すフローチャートである。
【０１１６】
図８に示す処理は、所定のタイミングでＣＰＵ１２３がＮＡＳアクセス情報取得処理部１３０を実行することによって実現される。
【０１１７】
処理が開始されると、ＣＰＵ１２３は、通知済み情報５００を読み出す（ステップ８０１）。
【０１１８】
次に、ＣＰＵ１２３は、通知済み情報５００があるか否かを判定する（ステップ８０２）。
【０１１９】
通知済み情報５００がない場合、まだ通知済み情報５００が作成されていない。この場合、ステップ８０１における読み出しに失敗している。この場合、ＣＰＵ１２３は、任意の時間帯を設定する（ステップ８０３）。ここで設定される時間帯は、アクセスの統計情報の基礎となるアクセスログ４００が取得される時間帯である。具体的には、例えば、現在時刻の１時間前から現在時刻までの１時間がステップ８０３において設定されてもよい。
【０１２０】
一方、通知済み情報５００がある場合、ＣＰＵ１２３は、読み出された通知済み情報を参照して、前回送信された通知済み情報の日時５０１が示す時間帯を取得する（ステップ８０４）。例えば、図５に示す通知済み情報５００が取得され、前回送信された通知済み情報が２００７年７月７日１３：３０：００に送信されたものである場合、ＣＰＵ１２３は、その情報に対応する日時５０１が示す時間帯である２００７年７月７日１２：００〜１３：００を取得する。
【０１２１】
次に、ＣＰＵ１２３は、アクセスログ４００から、ステップ８０４において取得した時間帯より後のアクセスログ情報、又は、ステップ８０３において設定した時間帯より後のアクセスログ情報を取得する（ステップ８０５）。例えば、ステップ８０４において２００７年７月７日１２：００〜１３：００が取得された場合、２００７年７月７日１３：００以降の日時４０１に対応するエントリが、アクセスログ４００から取得される。
【０１２２】
次に、ＣＰＵ１２３は、ステップ８０５において取得した情報から、ｒｅａｄ／ｗｒｉｔｅの比率を計算する（ステップ８０６）。具体的には、ＣＰＵ１２３は、ステップ８０５において取得された全エントリのうち、アクセス種別４０４が「ｒｅａｄ」であるエントリの割合、及び、アクセス種別４０４が「ｗｒｉｔｅ」であるエントリの割合を計算する。ここで計算された比率がアクセスの統計情報である。
【０１２３】
次に、ＣＰＵ１２３は、ステップ８０６において計算された比率をスキャンサーバ１００に送信し、その比率によって通知済み情報５００を更新する（ステップ８０７）。具体的には、ＣＰＵ１２３は、通知済み情報５００に新たなエントリを追加し、そのエントリの日時５０１に、ステップ８０４において取得した時間帯、又は、ステップ８０３において設定した時間帯を格納し、ｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３に、ステップ８０６において計算した比率を格納し、送信日時５０４に、ステップ８０７における送信が実行された時刻を格納する。
【０１２４】
以上で図８の処理が終了する。
【０１２５】
図９は、本発明の実施形態のスキャンサーバ１００のスキャン要求受付処理部１０８の処理を示すフローチャートである。
【０１２６】
図９に示す処理は、図６のステップ６０３、又は、図７のステップ７０２において、スキャンサーバ１００のＣＰＵ１０３がスキャン要求受付処理部１０８を実行することによって実現される。
【０１２７】
スキャン要求を受信したＣＰＵ１０３は、スキャン要求によって指定されたファイル名をキーとしてスキャン進捗管理テーブル３００を検索する（ステップ９０１）。
【０１２８】
次に、ＣＰＵ１０３は、ステップ９０１の検索キーを含むスキャン進捗管理テーブル３００のエントリが存在するか否かを判定する（ステップ９０２）。具体的には、スキャン要求によって指定されたファイル名をファイル名３０２として含むエントリがあるか否かが判定される。
【０１２９】
検索キーを含むエントリがないと判定された場合、スキャン要求によって指定されたファイルは、まだスキャンされたことがない。この場合、処理はステップ９０６に進む。
【０１３０】
一方、検索キーを含むエントリがあると判定された場合、指定されたファイルは、過去にスキャンされたことがある。この場合、ＣＰＵ１０３は、次に、指定されたファイルのスキャンが完了したか否かを判定する（ステップ９０３）。具体的には、ＣＰＵ１０３は、ステップ９０１の検索の結果取得されたエントリの完了／未完識別３０３の値が「完了」又は「未完」のいずれであるかを判定する。
【０１３１】
ステップ９０３において、指定されたファイルのスキャンが完了したと判定された場合、処理はステップ９０６に進む。
【０１３２】
ステップ９０６において、ＣＰＵ１０３は、受信したアクセス要求が読み出し要求であるか否かを判定する。具体的には、図９の処理が図６のステップ６０３において呼び出された場合、ＣＰＵ１０３は、受信したアクセス要求が読み出し要求でないと判定する。図９の処理が図７のステップ７０２において呼び出された場合、ＣＰＵ１０３は、受信したアクセス要求が読み出し要求であると判定する。
【０１３３】
ステップ９０２において検索キーを含むエントリがないと判定された後、ステップ９０６において読み出し要求であると判定された場合、存在しないファイルを指定した読み出し要求が送信されている。この場合、スキャンを実行することができないため、ＣＰＵ１０３は図９の処理を終了する。一方、ステップ９０３においてスキャンが完了したと判定された後、ステップ９０６において読み出し要求であると判定された場合、指定されたファイルのスキャンが既に完了しているため、そのファイルをさらにスキャンする必要がない。このため、ＣＰＵ１０３は図９の処理を終了する。
【０１３４】
ステップ９０６において、受信したアクセス要求が読み出し要求でない（すなわち書き込み要求である）と判定された場合、ＣＰＵ１０３は、ステップ９０７を実行する。具体的には、ＣＰＵ１０３はステップ９０７において、通知済み情報５００に基づいて按分比を計算し（ステップ９０７Ａ）、さらに、計算された按分比に基づいてスキャンを実行する（ステップ９０７Ｂ）。ステップ９０７において実行される処理については、図１０及び図１１を参照して詳細に説明する。ステップ９０７の実行が終了すると、処理はステップ９０５に進む。
【０１３５】
ステップ９０３において、指定されたファイルのスキャンが完了していないと判定された場合、ＣＰＵ１０３は、残っているスキャンを実行する（ステップ９０４）。具体的には、ＣＰＵ１０３は、指定されたファイルをディスクサブシステム１４０から読み出す。そして、ＣＰＵ１０３は、スキャン進捗管理テーブル３００の、指定されたファイルに対応する再開ポイント３１２の値を参照する。そして、ＣＰＵ１０３は、その再開ポイント３１２の値が示すパターン以降のパターンを用いて、指定されたファイルのスキャンを実行する。残っているスキャンの実行が終了すると（言い換えると、定義されている全てのパターンを用いて、指定されたファイルのスキャンが完了すると）、処理はステップ９０５に進む。
【０１３６】
なお、後述する非同期のスキャンが実行されている場合、ステップ９０３で指定されたファイルのスキャンが完了していないと判定された時点で、残っているスキャンの実行が既に開始されている可能性がある。この場合、ＣＰＵ１０３は、その非同期のスキャンが終了するのを待つ。そして、非同期のスキャンが終了すると（言い換えると、定義されている全てのパターンを用いて、指定されたファイルのスキャンが完了すると）、処理はステップ９０５に進む。
【０１３７】
ステップ９０５において、ＣＰＵ１０３は、スキャン進捗管理テーブル３００を更新する。
【０１３８】
具体的には、ステップ９０４において指定されたファイルのスキャンが完了した場合、ＣＰＵ１０３はステップ９０５において、指定されたファイルに対応するスキャン進捗管理テーブル３００のエントリの完了／未完識別３０３の値を「完了」に更新する。さらに、ＣＰＵ１０３は、そのエントリのｒｅａｄ時スキャン情報３０８に、ステップ９０４が終了した日時等を格納する。さらに、そのエントリの再開ポイント３１２に値が格納されている場合、ＣＰＵ１０３はその値を削除する。
【０１３９】
ステップ９０７において按分比に基づくスキャンが実行された後にステップ９０５が実行される場合、ＣＰＵ１０３は、ステップ９０７のスキャンが終了した日時を終了日時３０５に、ステップ９０７において最後に実行されたスキャンに使用されたパターンの番号を進捗度３０６に、使用されたパターン定義ファイルのバージョンを適用バージョン３０７にそれぞれ格納する。さらに、ＣＰＵ１０３は、進捗度３０６に格納した値の次の値を再開ポイント３１２に格納する。
【０１４０】
次に、ＣＰＵ１０３は、ステップ９０４又はステップ９０７において実行されたスキャンの結果、ウィルスの感染が検出されたか否かを判定する（ステップ９０８）。ウィルスの感染が検出された場合、ＣＰＵ１０３は、指定されたファイルを修復し、指定されたファイルをその修復されたファイルによって更新する（ステップ９０９）。
【０１４１】
ステップ９０９が終了した場合、又は、ステップ９０８においてウィルスの感染が検出されなかった場合、ＣＰＵ１０３は図９の処理を終了する（ステップ９１０）。このとき、ＣＰＵ１０３は、按分比に基づくスキャン（ステップ９０７）又は全てのパターンを用いたスキャン（ステップ９０４）が終了したことを示す通知をＮＡＳサーバ１２０に送信する。
【０１４２】
図１０は、本発明の実施形態において実行される按分比の計算及び按分比に基づくスキャンを示すフローチャートである。
【０１４３】
具体的には、図１０は、図９のステップ９０７においてＣＰＵ１０３によって実行される処理を詳細に示すものである。
【０１４４】
図９のステップ９０６において、受信したアクセス要求が読み出し要求でないと判定された場合、ＣＰＵ１０３は、通知済み情報５００から、指定されたファイルのｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３を取得する（ステップ１００１）。
【０１４５】
次に、ＣＰＵ１０３は、ステップ１００１において取得した比率に基づいて、按分比を算出する（ステップ１００２）。按分比とは、書き込み要求受信時に実行されるスキャンと、読み出し要求受信時に実行されるスキャンとの比率である。
【０１４６】
書き込み要求受信時に実行されるスキャンとは、ＮＡＳサーバ１２０が書き込み要求を受信した後、その書き込み要求に対する応答を返す前に実行されるスキャン、すなわち、図６のステップ６０３において実行されるスキャンである。読み出し要求受信時に実行されるスキャンとは、ＮＡＳサーバ１２０が読み出し要求を受信した後、その読み出し要求に対する応答を返す前に実行されるスキャン、すなわち、図７のステップ７０２において実行されるスキャンである。
【０１４７】
スキャンの比率とは、例えば、書き込み要求受信時に実行されるスキャンに使用されるパターン数と、読み出し要求受信時に実行されるスキャンに使用されるパターン数との比率を意味する。
【０１４８】
ここで、按分比の計算方法の例を説明する。
【０１４９】
スキャンサーバ１００のＣＰＵ１０３が高負荷であると、ファイルのスキャンに要する時間が増大する。例えば図６に示すように、ステップ６０３におけるスキャンが終了した後でアクセス要求に対する応答が返される。このため、スキャンに要する時間が増大すれば、タイムアウトの可能性が高まる。したがって、タイムアウトの発生を防止するためには、按分比は、ＣＰＵ１０３の負荷が所定の上限を超えないように計算されることが望ましい。そのため、本実施形態においては、ステップ１００１において取得された比率（％）を１００（％）から減算することによって按分比が計算される。
【０１５０】
具体的には、ステップ１００１において取得されたｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３がそれぞれＸ％及び（１００−Ｘ）％である場合、読み出し要求受信時に実行されるスキャンの比率が（１００−Ｘ）％、書き込み要求受信時に実行されるスキャンの比率がＸ％となる。
【０１５１】
例えば、図５に示す通知済み情報５００の最初のエントリが示すように、ｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３がそれぞれ３０％及び７０％である場合、読み出し要求受信時に実行されるスキャンの比率が７０％、書き込み要求受信時に実行されるスキャンの比率が３０％となる。スキャンの比率が、スキャンに使用されるパターン数の比率である場合、定義されているパターンのうち３０％のパターンを用いたスキャンが書き込み要求受信時に実行され、残りの７０％のパターンを用いたスキャンが読み出し要求受信時に実行される。例えば、図２に示すように定義されているパターン数が１５０である場合、４５個のパターンを使用したスキャンが書き込み要求受信時に実行され、残りの１０５個のパターンを使用したスキャンが読み出し要求受信時に実行される。
【０１５２】
その結果、例えば読み出しより書き込みが多く実行される場合には、書き込み要求受信時に実行されるスキャンの比率が、読み出し要求受信時に実行されるスキャンの比率より低くなる。スキャンの比率がスキャンに用いられるパターン数の比率である場合、書き込み要求受信時のスキャンに使用されるパターンの数が、読み出し要求受信時のスキャンに使用されるパターンの数より小さくなる。言い換えると、書き込み要求受信時のスキャンに使用されるパターンの数が、定義されているパターンの総数の半数より小さくなる。
【０１５３】
逆に、書き込みより読み出しが多く実行される場合には、書き込み要求受信時に実行されるスキャンの比率が、読み出し要求受信時に実行されるスキャンの比率より高くなる。
【０１５４】
これによって、書き込み要求受信時及び読み出し要求受信時のスキャンの実行によるＣＰＵ１０３の負荷が抑えられるため、ＣＰＵ１０３の過負荷によるスキャン実行の遅延が防止される。
【０１５５】
書き込み要求受信時に実行されなかった残りのスキャン（すなわち、書き込み要求受信時のスキャンにおいて使用されなかったパターンを用いたスキャン）は、読み出し要求受信時に実行される。しかし、後述するように、実際のＣＰＵ１０３の負荷（例えばＣＰＵ利用率）が所定の上限より低い場合には、読み出し要求の受信を待たずに残りのスキャンが実行されてもよい。
【０１５６】
次に、ＣＰＵ１０３は、指定されたファイルを対象として、ステップ１００２において算出された按分比に基づいて、書き込み要求受信時のスキャンを実行する（ステップ１００３）。具体的には、ＣＰＵ１０３は、指定されたファイルをディスクサブシステム１４０から読み出す。そして、ＣＰＵ１０３は、パターン定義ファイル１５０によって定義されているパターンのうち、ステップ１００２において算出された、書き込み要求受信時に実行されるスキャンの比率に相当する数のパターンを使用して、指定されたファイルのスキャンを実行する。
【０１５７】
次に、ＣＰＵ１０３は、スキャンサーバ１００のＣＰＵ１０３の利用率を取得する（ステップ１００４）。
【０１５８】
次に、ＣＰＵ１０３は、ステップ１００４において取得したＣＰＵ利用率が所定の上限値（閾値）未満であるか否かを判定する（ステップ１００５）。
【０１５９】
ＣＰＵ利用率が所定の上限値未満である場合、ＣＰＵ１０３は、指定されたファイルを対象として、残りのスキャンを非同期で実行する（ステップ１００６）。具体的には、ＣＰＵ１０３は、パターン定義ファイル１５０によって定義されているパターンのうち、ステップ１００３において使用されなかったパターンを使用して、指定されたファイルのスキャンを実行する。
【０１６０】
ステップ１００６におけるスキャンは、ステップ１００５の判定が終了した後、指定されたファイルに対する読み出し要求を受信したか否かにかかわらず実行される。このように、アクセス要求の受信を契機とせずに実行されるスキャンを、非同期のスキャンと記載する。
【０１６１】
ステップ１００６が終了すると、ＣＰＵ１０３は、図１０の処理を終了する。
【０１６２】
ステップ１００５において、ＣＰＵ利用率が所定の上限値未満でないと判定された場合、ＣＰＵ１０３は、ステップ１００６を実行せずに図１０の処理を終了する。
【０１６３】
図１０の処理が終了すると、処理は図９のステップ９０５に進む。
【０１６４】
なお、図９のステップ９０４及び図１０のステップ１００３に示すように、本実施形態のスキャンサーバ１００は、ＮＡＳサーバ１２０からスキャン要求を受信すると、そのスキャン要求によって指定されたファイルをディスクサブシステム１４０から読み出す。しかし、スキャン要求に、スキャンされるべきファイル自体が含まれていてもよい。この場合、スキャンサーバ１００は、ファイルをディスクサブシステム１４０から読み出す必要がない。
【０１６５】
しかし、本実施形態では、図１に示すように、スキャンサーバ１００とＮＡＳサーバ１２０との間の通信がＬＡＮ１８０のようなＩＰネットワークを介して実行され、一方、スキャンサーバ１００とディスクサブシステム１４０との間の通信が、ＦＣプロトコル等に基づくブロックアクセスによって実行される。このような場合、ＮＡＳサーバ１２０がファイルをスキャンサーバ１００に送信するよりも、スキャンサーバがファイルをディスクサブシステム１４０から読み出す方が高速である。このため、本実施形態においては、タイムアウトを防止するために、スキャンサーバ１００がディスクサブシステム１４０からファイルを読み出すことが望ましい。
【０１６６】
次に、計算された按分比に基づくスキャンの例について説明する。
【０１６７】
図１１は、本発明の実施形態において実行される按分比に基づくスキャンの例の説明図である。
【０１６８】
図１１は、あるファイルがＮＡＳサーバ１２０に書き込まれ、その後そのファイルが読み出される場合に、それぞれのタイミングで実行されるスキャンの例を示す。具体的には、図１１は、パターン１からパターン３までの三つの例を示す。パターン１は、書き込み要求受信時：読み出し要求受信時の按分比が５０％：５０％である場合に実行されるスキャンの例を示す。同様に、パターン２は、按分比が８０％：２０％である場合に実行されるスキャンの例を示す。パターン３は、按分比が２０％：８０％である場合に実行される非同期のスキャンの例を示す。
【０１６９】
パターン１の例では、ＮＡＳサーバ１２０がファイルの書き込み要求（１１０１）を受信した後、スキャンサーバ１００がそのファイルのスキャンを開始する。そして、スキャンの５０％が終了すると、ＮＡＳサーバ１２０が書き込み要求に対する応答（１１０２）を返す。その後、ＮＡＳサーバ１２０がそのファイルの読み出し要求（１１０３）を受信した後、スキャンサーバ１００がそのファイルの残りのスキャンを開始する。そして、残りの５０％のスキャンが終了すると、ＮＡＳサーバ１２０が読み出し要求に対する応答（１１０４）を返す。
【０１７０】
パターン２の例でも、パターン１と同様にスキャンが実行される。ただし、パターン２の例では、書き込み要求（１１０１）の受信から応答（１１０２）の送信までの間に８０％のスキャンが、読み出し要求（１１０３）の受信から応答（１１０４）の送信までの間に残りの２０％のスキャンが実行される。
【０１７１】
パターン３の例では、書き込み要求（１１０１）の受信から応答（１１０２）の送信までの間に２０％のスキャンが実行される。その後、読み出し要求（１１０３）の受信を待たずに、残りの８０％のスキャンが開始される。これは、図１０のステップ１００５においてＣＰＵ利用率が所定の上限値未満であると判定された場合に相当する。その後、読み出し要求（１１０３）を受信した時点でまだ残りの８０％のスキャンが終了していない場合、図９のステップ９０４に示すように、スキャンの終了を待ってから応答（１１０４）が送信される。
【０１７２】
上記のように、図１１には、ＮＡＳサーバ１２０がファイルの書き込み要求を受信してからその要求に対する応答を送信するまでの間に、ファイルのスキャンの一部が実行される例を示した。しかし、本実施形態では、ファイルの書き込み要求を受信してからその要求に対する応答を送信するまでの間に、ファイルのスキャンが全く実行されなくてもよい。
【０１７３】
例えば、ある時間帯に書き込み要求のみが発行され、読み出し要求が全く発行されなかった場合、その時間帯の通知済み情報５００のｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３はそれぞれ０％及び１００％となる。この場合、図１０に示す手順で按分比を計算すると、書き込み要求受信時に実行されるスキャンの按分比は０％となる。
【０１７４】
この場合、ＮＡＳサーバ１２０が書き込み要求に対する応答を送信した後で、そのファイルのスキャンの全部が実行される。このスキャンは、図１０及び図１１に示したように、非同期で実行されてもよいし、ＮＡＳサーバ１２０がファイルの読み出し要求を受信したときに実行されてもよい。
【０１７５】
上記の図６から図１１によれば、ＮＡＳサーバ１２０は、ファイルの書き込み要求を受信すると、そのファイルのスキャンの一部（例えば５０％）が終了した時点で、書き込み要求に対する応答を返す。残りのスキャンは、例えば、ＮＡＳサーバ１２０がそのファイルの読み出し要求を受信したときに実行される。書き込み要求を送信したクライアント１７０（例えばクライアント１７０Ａ）と読み出し要求を送信したクライアント１７０（例えばクライアント１７０Ｂ）が異なる場合、一つのファイルのスキャンのための処理時間が、複数のクライアント１７０のアクセスへの応答時間に分散される。さらに、ＣＰＵ１０３の負荷の増大を抑えるように適切な比率でスキャンの実行が分散される。これらの結果、アクセス要求に対するタイムアウトの発生が防止される。遅くともファイルが読み出された時点ではそのファイルの全てのスキャンが完了しているため、ウィルスによる被害の発生も防止される。
【０１７６】
図１２は、本発明の実施形態のスキャンサーバ１００の通知情報受付処理部１０９の処理を示すフローチャートである。
【０１７７】
図１２に示す処理は、スキャンサーバ１００がＮＡＳサーバ１２０から通知情報を受信したときに、ＣＰＵ１０３が通知情報受付処理部１０９を実行することによって実現される。
【０１７８】
最初に、ＣＰＵ１０３は、最新の通知情報を受信する（ステップ１２０１）。ここで受信する通知情報は、図８のステップ８０７においてＮＡＳサーバ１２０から送信された通知情報である。
【０１７９】
次に、ＣＰＵ１０３は、受信した通知情報を通知済み情報５００に格納する（ステップ１２０２）。
【０１８０】
以上で図１２に示す処理が終了する。
【０１８１】
図１３は、本発明の実施形態のスキャンサーバ１００のパターン定義監視処理部１１０の処理を示すフローチャートである。
【０１８２】
図６から図１１を参照して説明したように、本実施形態によれば、ＣＰＵ１０３の負荷を抑えるように適切な按分比が計算される。しかし、按分比が計算された後でパターン定義ファイル１５０が更新される場合がある。更新によって新たなパターンが追加された場合、読み出し要求受信時に実行されるスキャンにおいて使用されるパターン数は、按分比が計算された時点で見込まれたパターン数より多くなる。その結果、読み出し要求受信時のＣＰＵ１０３の負荷が増大し、タイムアウトが発生するおそれがある。
【０１８３】
図１３は、このようにパターンが追加された場合に、読み出し要求受信時のＣＰＵ１０３の負荷の増大を抑えるために、追加されたパターンと同数のパターンを用いたスキャンを非同期に実行する処理を示す。
【０１８４】
図１３に示す処理は、ＣＰＵ１０３がパターン定義監視処理部１１０を実行することによって実現される。
【０１８５】
最初に、ＣＰＵ１０３は、パターン定義ファイル１５０のバージョンをチェックする（ステップ１３０１）。具体的には、ＣＰＵ１０３は、現在のパターン定義ファイルバージョン２０１の値を取得する。
【０１８６】
次に、ＣＰＵ１０３は、パターン定義ファイル１５０のバージョンが更新されているか否かを判定する（ステップ１３０２）。具体的には、ＣＰＵ１０３は、ステップ１３０１で取得した（すなわち現在の）パターン定義ファイルバージョン２０１の値が、前回ステップ１３０１を実行したときに取得されたパターン定義ファイルバージョン２０１の値と異なっている場合、バージョンが更新されていると判定する。
【０１８７】
バージョンが更新されていないと判定された場合、ＣＰＵはステップ１３０１に戻る。
【０１８８】
バージョンが更新されていると判定された場合、パターン定義ファイル１５０に新たなパターンが追加されている。この場合、ＣＰＵ１０３は、スキャン進捗管理テーブル３００を検索し、スキャンが完了していないファイルを抽出する（ステップ１３０３）。具体的には、ＣＰＵ１０３は、完了／未完識別３０３に「未完」が格納されているエントリを抽出する。
【０１８９】
次に、ＣＰＵ１０３は、ステップ１３０３において抽出されたファイルの一つを選択する（ステップ１３０４）。
【０１９０】
次に、ＣＰＵ１０３は、ステップ１３０４において選択されたファイルを対象として、今回の更新によって追加されたパターン数と同数のパターンを用いたスキャンを実行する（ステップ１３０５）。具体的には、ＣＰＵ１０３は、選択されたファイルに対応するスキャン進捗管理テーブル３００の再開ポイント３１２が示すパターン以降の、今回の更新によって追加されたパターン数と同数のパターンを使用して、選択されたファイルをスキャンする。今回の更新によって追加されたパターン数は、パターン定義ファイル１５０に追加パターン数２０４として格納されている。
【０１９１】
さらに、ステップ１３０５においてＣＰＵ１０３は、スキャンの実行結果に整合するように再開ポイント３１２を更新する。
【０１９２】
例えば、パターン定義ファイル１５０の追加パターン数２０４として「２」が格納され、再開ポイント３１２に「＃７６」が格納されている場合、ステップ１３０５においてＣＰＵ１０３は、パターン番号２１１が「７６」及び「７７」の二つのパターンを用いたスキャンを実行する。そして、ＣＰＵ１０３は、再開ポイント３１２の値を「＃７８」に更新する。
【０１９３】
次に、ＣＰＵ１０３は、ステップ１３０５の結果、ステップ１３０４において選択されたファイルがウィルスに感染しているか否かを判定する（ステップ１３０６）。
【０１９４】
選択されたファイルがウィルスに感染していると判定された場合、ＣＰＵ１０３は、選択されたファイルを修復し、選択されたファイルをその修復されたファイルによって更新する（ステップ１３０８）。
【０１９５】
選択されたファイルがウィルスに感染していないと判定されたか、又は、ステップ１３０８が終了した場合、ＣＰＵ１０３は、ステップ１３０３において抽出された全てのファイルについて上記のステップ１３０５のスキャンが終了したか否かを判定する（ステップ１３０７）。
【０１９６】
全てのファイルについてステップ１３０５のスキャンが終了したと判定された場合、次回のパターン定義ファイルの更新を検出するために、処理はステップ１３０１に戻る。
【０１９７】
少なくとも一つのファイルについてステップ１３０５のスキャンが終了していないと判定された場合、残りのファイルをスキャンするために、処理はステップ１３０４に戻る。この場合、ステップ１３０４において、まだステップ１３０５のスキャンが終了していないファイルのうち一つが選択される。
【０１９８】
このように、パターン定義ファイル１５０の更新の結果、新たなパターンが追加された場合、その追加されたパターンと同数のパターンを用いたスキャンが非同期に実行される。このため、読み出し要求受信時のＣＰＵ１０３の負荷の増大によるタイムアウトの発生が防止される。
【０１９９】
次に、本実施形態の変形例を説明する。
【０２００】
ベンダー等によって提供されるパターンに、ウィルスの危険度を示す情報が付与されている場合がある。この場合、スキャンサーバ１００は、危険度が高いウィルスのパターンを用いたスキャンを優先的に実行してもよい。このようなウィルスの危険度に基づく処理について、図１４及び図１５を参照して説明する。
【０２０１】
図１４は、本発明の実施形態の変形例のパターン定義ファイル１５０の説明図である。
【０２０２】
図１４に示すパターン定義ファイル１５０は、図２に示すものと同様、共通部２００とパターン定義部２１０とを含む。図１４に示す共通部２００は、図２に示すものと同様であるため、説明を省略する。
【０２０３】
図１４に示すパターン定義部２１０は、パターン番号２１１、パターン名称２１２、優先度１４０１、パターン２１３及び追加フラグ２１４を含む。パターン番号２１１、パターン名称２１２、パターン２１３及び追加フラグ２１４は、図２に示すものと同様であるため、説明を省略する。
【０２０４】
優先度１４０１は、そのパターンを用いたスキャンの優先度（すなわち重要度）を示す値である。例えばウィルスの活動による被害の大きさ等に基づいて、ウィルスの危険度がベンダー等によって設定されている場合がある。危険度が高いウィルス程、優先してスキャンされることが望ましい。このため、優先度１４０１として、ウィルスの危険度を示す値が格納されることが望ましい。
【０２０５】
図１４の例では、パターン「Ｖｉｒｕｓ−Ａ」、「Ｖｉｒｕｓ−Ｂ」及び「Ｖｉｒｕｓ−Ｙ」の優先度１４０１として「Ａ」、パターン「Ｖｉｒｕｓ−Ｃ」及び「Ｖｉｒｕｓ−Ｚ」の優先度１４０１として「Ｂ」が格納されている。ここで、「Ａ」は「Ｂ」より高い優先度を示す。この例は、パターン「Ｖｉｒｕｓ−Ａ」、「Ｖｉｒｕｓ−Ｂ」及び「Ｖｉｒｕｓ−Ｙ」に対応するウィルスが、その他のパターンに対応するウィルスより危険であること、すなわち、「Ｖｉｒｕｓ−Ａ」、「Ｖｉｒｕｓ−Ｂ」及び「Ｖｉｒｕｓ−Ｙ」を用いたスキャンが、その他のパターンを用いたスキャンより先に実行されることが望ましいことを示す。
【０２０６】
なお、パターン定義部２１０において、パターンは、優先度が高いものから順に格納されていることが望ましい。図１４の例では、優先度「Ａ」が設定されたパターン「Ｖｉｒｕｓ−Ａ」及び「Ｖｉｒｕｓ−Ｂ」に、それぞれ、パターン番号「１」及び「２」が付与されている。一方、優先度「Ｂ」が設定されたパターン「Ｖｉｒｕｓ−Ｃ」には、パターン番号「３」が付与されている。このように、優先度１４０１がより高いパターンに、より小さいパターン番号２１１が付与されている場合、パターン番号２１１の順にスキャンが実行されれば、優先度１４０１が高いパターンを用いたスキャンが優先的に実行されることになる。
【０２０７】
図１４の例では、新たに追加されたパターン「Ｖｉｒｕｓ−Ｙ」及び「Ｖｉｒｕｓ−Ｚ」がパターン定義部２１０の末尾に追加され、これらの二つのパターンのうち優先度の高いパターン「Ｖｉｒｕｓ−Ｙ」の後にパターン「Ｖｉｒｕｓ−Ｚ」が追加されている。しかし、新たなパターンが追加されたときに、パターン定義部２１０に含まれる全パターンが優先度の順に並べ替えられてもよい。
【０２０８】
図１５は、本発明の実施形態の変形例において実行される按分比の計算及び按分比に基づくスキャンを示すフローチャートである。
【０２０９】
図１５に示す手順のうち、ステップ１００１からステップ１００３、及び、ステップ１００４からステップ１００６は、図１０に示したものと同様であるため、説明を省略する。
【０２１０】
ただし、ステップ１００３において、ＣＰＵ１０３は、優先度が高いパターンを用いたスキャンを優先的に実行することが望ましい。例えば、パターン定義ファイル１５０のパターン定義部において、優先度１４０１がより高いパターンに、より小さいパターン番号２１１が付与されている場合、ＣＰＵ１０３は、パターン番号２１１の順にスキャンを実行することが望ましい。あるいは、ＣＰＵ１０３は、優先度１４０１を参照して、優先度の順にスキャンを実行してもよい。
【０２１１】
図１５において、ステップ１００３の次に、ＣＰＵ１０３は、優先度「Ａ」が設定されたパターンを用いたスキャンが終了したか否かを判定する（ステップ１５０１）。
【０２１２】
優先度「Ａ」が設定されたパターンを用いたスキャンが終了したと判定された場合、処理はステップ１００４に進む。
【０２１３】
一方、優先度「Ａ」が設定されたパターンを用いたスキャンが終了していないと判定された場合、ＣＰＵ１０３は、優先度「Ａ」が設定された残りのパターンを用いたスキャンを非同期で実行する（ステップ１５０２）。この場合、ステップ１５０２の後、ステップ１００４からステップ１００６は実行されずに、処理は図９のステップ９０５に進む。その結果、ディスクサブシステム１４０から書き込み要求に対する応答が送信された後で、優先度「Ａ」が設定された残りのパターンを用いたスキャンが非同期に実行される。
【０２１４】
このように、図１４及び図１５によれば、高い優先度（すなわち危険度）が設定されたパターンを用いたスキャンが、それより低い優先度が設定されたパターンを用いたスキャンより優先して処理される。その結果、ウィルスによる深刻な被害の発生を、より確実に防止することができる。
【０２１５】
次に、アクセスの比率の変動に対応するために実行される処理について、図１６を参照して説明する。
【０２１６】
図１６は、本発明の実施形態の変形例のスキャンサーバ１００の通知情報受付処理部１０９の処理を示すフローチャートである。
【０２１７】
図６から図１１を参照して説明したように、本実施形態によれば、ＣＰＵ１０３の負荷を抑えるように適切な按分比が計算される。しかし、按分比が計算された後で、按分比の計算の基礎となるアクセス比率（すなわちｒｅａｄ比率５０２及びｗｒｉｔｅ比率５０３）が変動する場合がある。
【０２１８】
例えば、図５の第１エントリに示すように、ｒｅａｄ比率５０２：ｗｒｉｔｅ比率５０３が３０％：７０％である場合、書き込み要求受信時に３０％のスキャンが実行され、読み出し要求受信時に７０％のスキャンが実行されるように按分比が計算される。しかし、その後、第２エントリに示すように、ｒｅａｄ比率５０２：ｗｒｉｔｅ比率５０３が７０％：３０％に変化する場合がある。この場合、読み出し要求が多く（すなわち総アクセス数の７０％）発生している状況において、読み出し要求受信時に７０％のスキャンを実行する必要があるため、ＣＰＵ１０３の負荷が増大し、タイムアウトが発生するおそれがある。
【０２１９】
図１６は、このようにアクセス比率が変動した場合に、読み出し要求受信時のＣＰＵ１０３の負荷の増大を抑えるために、アクセス比率の変動を吸収するためのスキャンを非同期に実行する処理を示す。
【０２２０】
図１６に示す処理は、ＣＰＵ１０３が通知情報受付処理部１０９を実行することによって実現される。
【０２２１】
図１６に示す手順のうち、ステップ１２０１及びステップ１２０２は図１２に示したものと同様であるため、説明を省略する。
【０２２２】
ステップ１２０２の次に、ＣＰＵ１０３は、スキャン進捗管理テーブル３００を参照して、完了／未完識別３０３が「未完」であり、かつ、終了日時３０５に格納された日時から現在日時までの時間が所定の時間を超えているエントリ（すなわち、現在日時から終了日時３０５の値を減算した値が所定の時間を超えているエントリ）を検索する（ステップ１６０１）。時間が経過するほど、アクセス比率が変動する可能性が高いためである。
【０２２３】
次に、ＣＰＵ１０３は、ステップ１６０１において取得されたエントリにおける残りのパターン数と、現在の按分比に基づいて算出された残りのパターン数とを比較し、前者のパターン数が後者のパターン数より多いか否かを判定する（ステップ１６０２）。現在の按分比とは、最新の通知済み情報５００に基づいて計算された按分比である。なお、図１６のステップ１６０２において「余剰がある」とは、前者のパターン数が後者のパターン数より多いことを意味する。
【０２２４】
なお、最新のｒｅａｄ比率５０２の値が、ステップ１６０１において取得されたエントリの終了日時３０５が示す時点におけるｒｅａｄ比率５０２の値（すなわち、最新でないｒｅａｄ比率５０２の値）より高い場合、ステップ１６０２において、前者のパターン数が後者のパターン数より多いと判定される。
【０２２５】
前者のパターン数が後者のパターン数より多い場合、実際に読み出し要求を受信した時点のＣＰＵ１０３の負荷が当初の見込みより増大し、タイムアウトが発生する恐れがある。この場合、ＣＰＵ１０３は、後者のパターン数と前者のパターン数との差に相当する数のパターンを用いたスキャンを実行する（ステップ１６０３）。
【０２２６】
次に、ＣＰＵ１０３は、ステップ１６０３におけるスキャンの実行を反映するようにスキャン進捗管理テーブル３００を更新する（ステップ１６０４）。
【０２２７】
ステップ１６０４が実行されると、図１６に示す処理が終了する。
【０２２８】
ステップ１６０２において前者のパターン数が後者のパターン数より多くないと判定された場合、読み出し要求受信時のＣＰＵの負荷は当初の見込みより増大しない。したがって、この場合、ステップ１６０３及びステップ１６０４は実行されず、図１６に示す処理が終了する。
【０２２９】
次に、按分比の精度向上について、図１７を参照して説明する。
【０２３０】
図１０において説明したように、按分比は、アクセス比率に基づいて算出される。そして、按分比に相当する数のパターンを用いたスキャンが実行される。しかし、アクセス比率と総パターン数との関係によっては、按分比に相当するパターンの数が整数にならない場合がある。
【０２３１】
例えば、パターン定義ファイル１５０において定義されているパターンの総数が１００であり、アクセス比率に基づいて算出された按分比が７４．８％：２５．２％（書き込み要求受信時のスキャン：読み出し要求受信時のスキャン）である場合、書き込み要求受信時に、７４．８個のパターンを使用してスキャンを実行する必要がある。この場合、端数を切り上げて、７５個のパターンを使用したスキャンが実行されてもよい。しかし、以下に説明する変形例では、上記のような端数に相当するスキャンが、ファイルの途中までスキャンを実行することによって実現される。
【０２３２】
例えば、上記のように、パターンの総数が１００、按分比が７４．８％：２５．２％である場合、ＣＰＵ１０３は、書き込み要求を受信したときに、まず１番目のパターンから７４番目のパターンまでを使用したスキャンを実行する。次に、ＣＰＵ１０３は、７５番目のパターンと、スキャンされるファイルのデータとの照合を、そのファイルの先頭から開始し、ファイルの全長の８０％の位置まで照合が終了した時点で、その照合を停止する。
【０２３３】
その後読み出し要求を受信したとき、ＣＰＵ１０３は、７５番目のパターンを使用したスキャンを、ファイルの全長の８０％の位置から開始する。７５番目のパターンを使用したスキャンが終了すると、続いてＣＰＵ１０３は、７６番目から１００番目までのパターンを使用したスキャンを実行する。
【０２３４】
上記の具体例を一般化すると、定義されているパターンの総数がＮ、アクセス比率に基づいて算出された按分比（書き込み要求受信時のスキャン：読み出し要求受信時のスキャン）がＸ％：（１００−Ｘ）％、スキャンされるファイルのデータの全長がＳ（バイト）である場合、
Ｎｗｒｉｔｅ＝ＩＮＴ（Ｘ％＊Ｎ）                ・・・（１）
Ｒｗｒｉｔｅ＝Ｓ＊（Ｘ％＊Ｎ−Ｎｗｒｉｔｅ）    ・・・（２）
となる。ここで、Ｎｗｒｉｔｅは、書き込み要求受信時のファイルの全長にわたるスキャンに使用されるパターン数、Ｒｗｒｉｔｅは、書き込み要求受信時の最後のパターンを用いてスキャンされるファイルの範囲、記号「＊」は乗算、関数「ＩＮＴ（）」は小数部分の切り捨てを意味する。
【０２３５】
例えば、Ｎ＝１００、Ｘ＝７４．８（％）、及び、Ｓ＝５１２（バイト）を式（１）及び（２）に代入すると、
Ｎｗｒｉｔｅ＝ＩＮＴ（０．７４８＊１００）＝７４
Ｒｗｒｉｔｅ＝５１２＊（０．７４８＊１００−７４）＝４０９
が得られる。これは、上記のように、１番目のパターンから７４番目のパターンまでを使用したスキャンが実行され、さらに、７５番目のパターンを使用したスキャンがファイルの全長の８０％（すなわち５１２バイト中の４０９バイト）まで実行されることを示す。
【０２３６】
上記のＮｗｒｉｔｅ及びＲｗｒｉｔｅの算出は、図１０のステップ１００２において実行される。Ｎｗｒｉｔｅ及びＲｗｒｉｔｅに基づくスキャンは、図１０のステップ１００３において実行される。上記のように実行されたスキャンの進捗は、図１７に示すテーブルによって管理される。
【０２３７】
図１７は、本発明の実施形態の変形例のスキャン進捗管理テーブル３００の説明図である。
【０２３８】
図１７において、図３と共通する部分については、説明を省略する。
【０２３９】
なお、説明を簡単にするため、図１７は、パターン定義ファイル１５０において定義されているパターンの総数が１００である場合のスキャン進捗管理テーブル３００を示す。
【０２４０】
図１７の進捗度３０６、進捗度３１０及び再開ポイント３１２には、パターンの番号に加えて、ファイルデータにおける位置を示す情報が格納される。例えば、図１７の第１エントリの進捗度３０６には、「＃７５」及び「４０９／５１２」が格納されている。これらの値は、このエントリに対応するファイル「／ｄｉｒ−ａ／ａａａ．ｔｘｔ」の全長が５１２バイトであること、及び、７５番目のパターンを使用したこのファイルのスキャンが、このファイルの先頭から４０９バイトの位置まで終了したことを示す。
【０２４１】
以上、本発明の実施形態によれば、ＮＡＳサーバ１２０は、ファイルの書き込み要求を受信すると、そのファイルのスキャンの一部（例えば５０％）が終了した時点で、書き込み要求に対する応答を返す。スキャンの一部とは、定義されているパターンの一部を用いたスキャンであってもよいし、スキャンされるファイルの一部を対象とするスキャンであってもよい。
【０２４２】
ＮＡＳサーバ１２０は、ある時間帯に受信したアクセス要求の比率（すなわち、書き込み要求の数と読み出し要求の数との比率）を、スキャンサーバ１００に送信する。スキャンサーバ１００は、送信された比率に基づいて、スキャンの実行の比率を計算する。この比率に基づいてスキャンを実行することによって、ＣＰＵ１０３の負荷が適切に分散される。
【０２４３】
これらによってＣＰＵ１０３のレスポンスが改善される結果、アクセス要求に対するタイムアウトの発生が防止される。
【０２４４】
パターンが新たに追加された場合、及び、アクセス要求の比率が変動した場合にも、ＣＰＵ１０３の負荷の増大を防ぐことによって、タイムアウトの発生が防止される。
【０２４５】
遅くともファイルが読み出された時点ではそのファイルの全てのスキャンが完了しているため、ウィルスによる被害の発生も防止される。
【０２４６】
危険度が高いウィルスのパターンを用いたスキャンを優先的に実行することによって、ウィルスによる被害の発生を確実に防止することができる。
【図面の簡単な説明】
【０２４７】
【図１】本発明の実施形態の計算機システムの構成を示すブロック図である。
【図２】本発明の実施形態のパターン定義ファイルの説明図である。
【図３】本発明の実施形態のスキャン進捗管理テーブルの説明図である。
【図４】本発明の実施形態のアクセスログの説明図である。
【図５】本発明の実施形態の通知済み情報の説明図である。
【図６】本発明の実施形態のＮＡＳサーバのｗｒｉｔｅ要求受付処理部の処理を示すフローチャートである。
【図７】本発明の実施形態のＮＡＳサーバのｒｅａｄ要求受付処理部の処理を示すフローチャートである。
【図８】本発明の実施形態のＮＡＳサーバのＮＡＳアクセス情報取得処理部の処理を示すフローチャートである。
【図９】本発明の実施形態のスキャンサーバのスキャン要求受付処理部の処理を示すフローチャートである。
【図１０】本発明の実施形態において実行される按分比の計算及び按分比に基づくスキャンを示すフローチャートである。
【図１１】本発明の実施形態において実行される按分比に基づくスキャンの例の説明図である。
【図１２】本発明の実施形態のスキャンサーバの通知情報受付処理部の処理を示すフローチャートである。
【図１３】本発明の実施形態のスキャンサーバのパターン定義監視処理部の処理を示すフローチャートである。
【図１４】本発明の実施形態の変形例のパターン定義ファイルの説明図である。
【図１５】本発明の実施形態の変形例において実行される按分比の計算及び按分比に基づくスキャンを示すフローチャートである。
【図１６】本発明の実施形態の変形例のスキャンサーバの通知情報受付処理部の処理を示すフローチャートである。
【図１７】本発明の実施形態の変形例のスキャン進捗管理テーブルの説明図である。
【符号の説明】
【０２４８】
１００  スキャンサーバ
１０１、１０４、１２１、１２４、１４２、１４６  インターフェース（Ｉ／Ｆ）
１０２、１２２  メモリ
１０３、１２３、１４４  ＣＰＵ
１０５  ウィルススキャンエンジン
１０８  スキャン要求受付処理部
１０９  通知情報受付処理部
１１０  パターン定義監視処理部
１２０  ＮＡＳサーバ
１２５  ファイル共有プログラム
１２８  ｗｒｉｔｅ要求受付処理部
１２９  ｒｅａｄ要求受付処理部
１３０  ＮＡＳアクセス情報取得処理部
１４０  ディスクサブシステム
１４７Ａ〜１４７Ｄ  ディスクドライブ
１４８Ａ〜１４８Ｃ  論理ボリューム（ＬＵ）
１４９  ユーザファイル
１５０  パターン定義ファイル
１６０  ファイバーチャネル（ＦＣ）スイッチ
１８０  ローカルエリアネットワーク（ＬＡＮ）
１７０Ａ、１７０Ｂ  クライアント
【図１】
0004943278.tif 000002
【図２】
0004943278.tif 000003
【図３】
0004943278.tif 000004
【図４】
0004943278.tif 000005
【図５】
0004943278.tif 000006
【図６】
0004943278.tif 000007
【図７】
0004943278.tif 000008
【図８】
0004943278.tif 000009
【図９】
0004943278.tif 000010
【図１０】
0004943278.tif 000011
【図１１】
0004943278.tif 000012
【図１２】
0004943278.tif 000013
【図１３】
0004943278.tif 000014
【図１４】
0004943278.tif 000015
【図１５】
0004943278.tif 000016
【図１６】
0004943278.tif 000017
【図１７】
0004943278.tif 000018