説明

漸進・透過的ファイル更新

目標ファイルをデータ損傷から保護するシステムおよび方法において、ラッパーアプリケーションは目標ファイルに作用する書き込みコールを透過的に傍受し、関係データをデルタファイルに蓄積する。時折、一時ファイルで目標ファイルのバックアップをとり、目標ファイルを更新する。また、ラッパーアプリケーションは、目標ファイルにアクセスする読み出しコールを傍受し、更新情報と目標ファイルのデータとを一時ファイルの中で併合する。併合されたデータは、読み出し結果データとして返却される。

【発明の詳細な説明】
【技術分野】
【0001】
目標ファイルを損傷から保護する種々の方法およびシステムが可能であり、特に方法およびシステムは、目標ファイルが書き込みのために開いているときの混乱によって生じるデータ損傷を防ぐことができる。
【背景技術】
【0002】
コンピュータ工学技術ではフラッシュメモリ装置がよく知られている。
通常、そのようなメモリで情報を蓄積するには、オペレーティングシステムの管理下にあるデータファイルに情報を蓄積する。
フラッシュ蓄積システムの特徴として、書き込みのためのファイルが開いているときに停電やソフトウェアクラッシュ等、予期せぬ事態が発生すると、データファイルがデータ損傷を被りやすいことが知られている。ファイルへの書き込みは常に行われ、ファイルを更新するにはファイルを書き込みのために開かなければならないため、これは深刻な問題を投げかける。
【0003】
これまで、ソフトウェアアプリケーションでファイルを特別な方法で処理してこのリスクを抑えるソリューションが開発されてきた。開いたファイルのバックアップコピーを定期的に作成する多くのワープロアプリケーションに、そのようなソリューションを見ることができる。ファイルの破損が検出された後に修復ユーティリティを実行する場合もある。しかし、そのようなソリューションはアプリケーションしだいで異なり、アプリケーションの開発ペースを落とし、プログラミングエラーによりタイプの異なる問題が生じることがある。さらに、実行中のアプリケーションがファイルのオリジナルバージョンを保護しながら更新済みの暫定コピーも保持していると、アクセス競合の問題(そのファイルを要望する別のアプリケーションがどちらのファイルにアクセスするかという問題)が生じる。この問題にあたっては面倒なファイルロックが必要になる。保護方法にはシステム全体規模のファイル保護方式もあり、この場合は、データ蓄積装置全体か特定の重要データの永続バックアップコピーを絶えず更新する。永続バックアップを維持するには、ファイルを絶えずチェックし更新するために多大なデータ蓄積容量とシステムリソースが要求される。
【0004】
前述した原因によるファイル損傷のリスクがなく、永続バックアップコピーを維持せずとも任意のアプリケーションで任意のデータファイルを扱えるようにするソリューションがあれば大変有利であり、その必要性は広く認められている。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】Computer programming text book "Loadable Kernel Module Programming and System Call Interception" by Nitesh Dhanjani and Gustavo Rodriguez-Rivera published in the Linux Journal 2006
【非特許文献2】"Advanced Windows 3rd Edition" by Jeffery Richter, Microsoft Press, Redmond Washington, 1997(具体的には711〜715ページ)
【発明の概要】
【0006】
目標ファイルをデータ損傷から保護する種々の方法およびシステムが可能であり、特に方法およびシステムは、目標ファイルが書き込みのために開いているときの混乱によって生じるデータ損傷を防ぐことができる。
【0007】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムの一実施形態は、a)ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、このプログラムコードは、i)第2のアプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するコードであって、少なくとも1つのファイルコマンドは目標ファイルに作用するコードと、ii)少なくとも1つのファイルコマンドに関する更新情報を保存するコードと、iii)更新情報により目標ファイルを更新するコードと、を含むプロセッサと、b)目標ファイルを蓄積する第1のメモリ領域と、c)更新情報を蓄積する第2のメモリ領域と、を備える。ラッパーアプリケーションは、ファイルコマンドを発行する第2のアプリケーションから独立している。
【0008】
コンピュータ可読コードを具備するコンピュータ可読蓄積媒体の一実施形態において、目標ファイルをデータ損傷から保護するコンピュータ可読コードは、a)アプリケーションによって発行され目標ファイルに作用する少なくとも1つのファイルコマンドを傍受するプログラムコードと、b)目標ファイルを変えることなく少なくとも1つのファイルコマンドに関する更新情報を保存するプログラムコードと、c)更新情報により目標ファイルを更新するプログラムコードと、を含む。コンピュータ可読コードは、コマンドを発行するアプリケーションから独立している。
【0009】
目標ファイルをデータ損傷から保護するためにラッパープログラムを使用する方法の一実施形態は、a)アプリケーションによって発行され目標ファイルに作用する少なくとも1つのファイルコマンドをラッパープログラムによって傍受するステップであって、傍受するステップはアプリケーションにとって不可視であるステップと、b)目標ファイルを変えることなく少なくとも1つのファイルコマンドに関する更新情報を保存するステップと、c)更新情報により目標ファイルを更新するステップと、を含む。
【0010】
保護対象目標ファイルからデータを読み出すシステムの一実施形態は、ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサを備え、このプログラムコードは、ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するコードであって、ファイルコマンドは保護対象目標ファイルにアクセスするコードと、ファイルコマンドに関する更新情報を読み出すコードと、を含む。また、システムは、保護対象目標ファイルを蓄積する第1のメモリ領域と、更新情報を蓄積する第2のメモリ領域と、を備える。
【0011】
保護対象目標ファイルを読み出すためにラッパープログラムを使用する方法の一実施形態は、アプリケーションによって発行される少なくとも1つのファイルコマンドをラッパープログラムによって傍受するステップを含み、ファイルコマンドは保護対象目標ファイルにアクセスする。傍受するステップは、アプリケーションにとって不可視である。また、この方法は、少なくとも1つのファイルコマンドに関する更新情報をデルタファイルから読み出すステップを含む。デルタファイルは、保護対象目標ファイルから独立している。さらに、この方法は、目標ファイルのデータと更新情報とを併合するステップと、併合されたデータをファイルコマンドに対する応答として返却するステップとを含む。
【0012】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムの一実施形態は、目標ファイルを蓄積する第1のメモリ領域を備える。また、このシステムは、目標ファイルに作用する少なくとも1つのファイルコマンドに関する更新情報を蓄積する第2のメモリ領域を備える。また、このシステムは、ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサを備え、このプログラムコードは、目標ファイルに作用する少なくとも1つのファイルコマンドを傍受するコードと、第2のメモリ領域に更新情報を保存するコードと、更新情報により目標ファイルを更新するコードとを含む。ラッパープログラムは、ファイルコマンドを発行するアプリケーションから独立している。
【0013】
目標ファイルを蓄積するシステムにおいて、第1のメモリ領域はデータ処理装置の不揮発性メモリ内にある。システムの実施形態によっては、第2のメモリ領域は第1のメモリ領域と同じ不揮発性メモリ内にあり、目標ファイルと更新情報はメモリ内の別々の場所に蓄積される。別の実施形態において、第2のメモリ領域はデータ処理装置の揮発性メモリ内にある。別の実施形態において、第2のメモリ領域はデータ蓄積装置のメモリ(揮発性または不揮発性)内にある。
【0014】
目標ファイルを蓄積するシステムにおいて、第1のメモリ領域は可搬型データ蓄積装置の不揮発性メモリ内にある。取り外し可能な媒体(例えば、磁気ディスク、光ディスク)や可搬型ドライブ(例えば、フラッシュディスク、外付けハードドライブ、またはスマートカード)は可搬型データ蓄積装置の例である。実施形態によっては、第2のメモリ領域は第1のメモリ領域と同じメモリ内にあり、目標ファイルと更新情報はメモリ内の別々の場所に蓄積される。別の実施形態において、第2のメモリ領域はデータ処理装置のメモリ(揮発性または不揮発性)内にある。別の実施形態において、第2のメモリ領域は可搬型データ蓄積装置の揮発性メモリ内にある。
【0015】
目標ファイルを蓄積するシステムにおいて、更新情報は少なくとも1つのファイルコマンドに関するデータのみを含む。具体的に、更新データと、第2のメモリ領域と、デルタファイルは、目標ファイルからコピーされたデータを収容しない。したがって、アプリケーションによって発行され目標ファイルに作用するコマンドが蓄積された後でも、目標ファイルのデータ1部と(目標ファイルのデータは第1のメモリ領域だけに蓄積される)、蓄積されたファイルコマンドに関する更新情報1部(蓄積されたファイルコマンドに関するデータは第2のメモリ領域だけに蓄積される)だけが残る。併合イベントが発生した後に限り、目標ファイルのデータが一時ファイルへコピーされる。
【0016】
さらに、目標ファイルを蓄積するシステムの一実施形態は、一時ファイルを蓄積する第3のメモリ領域を含み、ラッパーアプリケーションはさらに、目標ファイルの少なくとも一部分を一時ファイルにコピーするコードを含む。代替の実施形態において、一時ファイルは独立したファイルか、既存のファイル内に一時的に割り当てられた場所か、さもなくば揮発性メモリ内に一時的に割り当てられた場所である。さらに、ラッパーアプリケーションは、蓄積された更新情報を一時ファイルに適用して目標ファイルの更新バージョンを作るコードを含む。さらに、ラッパーアプリケーションは、目標ファイルの一部分を一時ファイルで差し替えるコードを含む。一代替の実施形態によると、第3のメモリ領域は第1のメモリ領域と同じメモリ内にある。別の代替の実施形態において、第3のメモリ領域は第2のメモリ領域と同じメモリ内にある。さらなる代替の実施形態において、第3のメモリ領域は前述したメモリのいずれか1つにある。つまり第3のメモリ領域は、データ処理装置またはデータ蓄積装置の揮発性または不揮発性メモリ内にあり、第3のメモリ領域の位置は第1および第2のメモリ領域の位置との組み合わせになる。
【0017】
目標ファイルをデータ損傷から保護するコンピュータ可読コードを具備するコンピュータ可読蓄積媒体の一実施形態は、アプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するプログラムコードを含み、このプログラムコードは、ファイルコマンドを発行するアプリケーションから独立している。プログラムコードは後述する一実施形態において、特定のアプリケーションとは別個に実行でき、任意のアプリケーションからのファイルコマンドを傍受する。このファイルコマンドは目標ファイルに作用する。目標ファイルを変えることなくファイルコマンドに関する更新情報を保存し、更新情報により目標ファイルを更新するプログラムコードを盛り込むこともできる。代替の実施形態において、一定の時間スケジュールに従って更新を行うこと、または1つ以上の終止イベントに応じて更新を行うこと、または一定の時間スケジュールと1つ以上の終止イベントとの組み合わせで更新を行うことをコードで指定できる。可搬型蓄積装置に内蔵されたROMや、蓄積装置とともにパッケージで販売される取り外し可能な媒体(例えば、CD)等は、コンピュータ可読媒体の例である。代わりに、コンピュータ可読媒体はインターネット上でアクセスできるサーバに設置されたハードディスクであってもよい。プログラムコードは単独プログラムとして機能し、1つ以上の任意の蓄積装置でデータを保護する。代わりに、コードをドライバプログラムに組み入れてデータ処理装置で実行することもでき、この場合のドライバプログラムはデータ処理装置とデータ蓄積装置との間で橋渡しの役割を果たす。代わりに、オペレーティングシステムやファイルサーバアプリケーションにコードを組み込むこともできる。さらなる代替の実施形態において、データ蓄積装置の内部プロセッサによってコードが実行される。
【0018】
ファイルコマンドを傍受しかつ更新情報を保存するプログラムコードの一実施形態は、1つ以上の条件しだいで傍受と保存を行う。例えば、コマンドを発行するアプリケーションが複数の「対象」アプリケーションの1つである場合に限り、傍受と保存を実行する。「対象」アプリケーションはここでの説明の文脈において、目標ファイルを修正するファイルコマンドがラッパープログラムによって傍受されるアプリケーションとして指定されたアプリケーションと定義する(対象アプリケーションは通常、停電保護機能なしで重要ファイルを蓄積するアプリケーションである[例えば、Microsoft Visual Studio(登録商標)])。代替例では、「対象外」アプリケーション以外のアプリケーションによってファイルコマンドが発行される場合にファイルコマンドを傍受し、更新情報を保存する。「対象外」アプリケーションはここでの説明の文脈において、目標ファイルを修正するファイルコマンドがラッパープログラムによって傍受されないアプリケーションとして指定されたアプリケーションと定義する(例えば、独自の自動ファイル保護機能を持つMicrosoft Word(登録商標)は対象外のアプリケーションとし、あるいは多数の一時ファイルは保存してもユーザによって修正されたファイルは通常保存しないMicrosoft Internet Explorer(登録商標)は対象外とする)。代替例では、ファイルコマンドが一時ファイル以外のファイルに作用する場合にファイルコマンドを傍受し、更新情報を保存する。代替例では、ファイルコマンドが「対象」ファイルタイプに属するファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。「対象」ファイルタイプはここでの説明の文脈において、ラッパーアプリケーションによる保護の対象として指定されたファイルタイプである[例えば、.txtファイルは対象ファイルタイプとする]。代替例では、ファイルコマンドが「対象外」ファイルタイプに属さないファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。「対象外」ファイルタイプはここでの説明の文脈において、ラッパーアプリケーションによる保護の対象外として指定されたファイルタイプであり[例えば、ファイルタイプ.docおよび.tmpは対象外とする]、さらに代替例では、ファイルコマンドが対象蓄積装置に蓄積されたファイルに作用する場合に、ファイルコマンドを傍受し、更新情報を保存する。対象装置はここでの説明の文脈において、保護の対象として指定された装置と定義されるため、対象装置にあるファイルは保護の対象となる。
【0019】
さらに、コンピュータ可読コードの一実施形態は、保存コードが実行されてから更新コードが実行されるまでの間に目標ファイルに作用するすべての書き込みコマンドを傍受するコードを含む。
さらに、コンピュータ可読コードの一実施形態は、終止イベントを検出するコードと、終止イベントが検出される場合に更新情報により目標ファイルを更新するコードとを含む。例えば、終止イベントは、目標ファイルを閉じるコマンドが発行されること、目標ファイルにアクセスしたアプリケーションが終了すること、複数のファイルコマンドに関する統計に基づき条件が成立すること、[例えば、目標ファイルに向けて発行されるファイルコマンドのうち、10キロバイト未満のデータを変更するものが80%を占める場合に、目標ファイルで10キロバイト以上のデータを変更するファイルコマンドが発行されると終止イベントをトリガーする]、前回の目標ファイル更新以降に最大時間しきい値を超過すること等を含む。
【0020】
さらに、コンピュータ可読コードの一実施形態は、目標ファイルの一部分を一時ファイルにコピーするプログラムコードと、保存済み更新情報を一時ファイルに適用するプログラムコードとを含む。コードは、一代替の実施形態において、更新情報を保存した直後に一時ファイルを開き、データをコピーできるようにする。コードは、第2の代替の実施形態において、目標ファイルを更新する直前に一時ファイルを開き、データをコピーできるようにする。
さらに、コンピュータ可読コードの一実施形態は、併合イベントが発生した場合に保存済み更新情報を一時ファイルに適用するプログラムコードを含む。
【0021】
説明する好適な実施形態のさらなる特徴によると、併合イベントは例えばi)目標ファイルを閉じるコマンドが発行されること、ii)目標ファイルにアクセスしたアプリケーションが終了すること、iii)複数のファイルコマンドに関する統計に基づき条件が成立すること[例えば、目標ファイルに向けて発行されるファイルコマンドのうち、10キロバイト未満のデータを変更するものが80%を占める場合に、目標ファイルで10キロバイト以上のデータを変更するファイルコマンドが発行されると終止イベントをトリガーする]、iv)更新情報を収容するデルタファイルのサイズが最大サイズしきい値を超過すること、v)オペレーティングシステムの活動レベルが最低活動しきい値を下回ること、vi)前回の併合イベント以降に最大時間しきい値を超過すること、またはvii)目標ファイルを読み出すコマンドが発行されること等を含み、目標ファイルを読み出すコマンドが発行される場合は、読み出しコマンドの実行を模擬する直前に保存済み更新情報を一時ファイルに適用する。したがって、一時ファイルに収容された更新済みデータは、読み出しコマンドを発行したアプリケーションに対し読み出し情報として返却される。これとは別に、目標ファイルの更新直前に保存済みファイルコマンドを一時ファイルへ適用する。
【0022】
説明する好適な実施形態のさらなる特徴によると、コンピュータ可読コードはさらに、終止イベントを検出するプログラムコードと、終止イベントが検出される場合に保存済み更新情報により目標ファイルを更新し、さらにその後目標ファイル、または一時ファイル、または保存済み更新情報を収容するデルタファイルを、削除するプログラムコードとを含む。
【0023】
目標ファイルをデータ損傷から保護するためにラッパープログラムを使用する方法の一実施形態は、ラッパープログラムが目標ファイルに作用する少なくとも1つのファイルコマンドを透過的に傍受するステップと、ラッパープログラムが目標ファイルを変えることなく少なくとも1つのファイルコマンドに関する更新情報を保存するステップとを含み、ラッパープログラムは、ファイルコマンドを発行するアプリケーションから独立している。更新情報は、少なくとも1つのファイルコマンドを実行するにあたって必要な情報を含む。また、この方法は、更新情報により目標ファイルを更新するステップを含む。
【0024】
説明する好適な実施形態のさらなる特徴によると、更新情報の保存が始まって保存済み更新情報による目標ファイルの更新が終わるまでの間に、複数の対象アプリケーションに属する一アプリケーションによって発行され目標ファイルに作用する書き込みコマンドはすべて傍受され、保存される。
説明する好適な実施形態のさらなる特徴によると、目標ファイルを更新することは、目標ファイルの少なくとも一部分を一時ファイルにコピーするサブステップと、保存済み更新情報を一時ファイルに適用するサブステップと、目標ファイルの全体または一部分を一時ファイルの全体または一部分で差し替えるサブステップとを含み、これにより事実上目標ファイルは更新され、一時ファイルは削除される。
【0025】
説明する好適な実施形態のさらなる特徴によると、更新するステップは1つ以上の終止イベントが発生する場合に実行される。終止イベントは例えば、i)目標ファイルを閉じるコマンドが発行されること、ii)目標ファイルにアクセスしたアプリケーションが終了すること、iii)複数のファイルコマンドに関する統計に基づき条件が成立すること[例えば、30分の期間中にアプリケーションが5分に1回以上の割合で目標ファイルにアクセスしていた場合に、アプリケーションが目標ファイルにアクセスしない状態が10分間続くと終止イベントが発生し、目標ファイルの更新がトリガーされる]、iv)オペレーティングシステムの活動レベルが最低活動しきい値を下回ること、v)既に保存済みのファイルコマンドの発行以降に最大時間しきい値を超過すること、vi)前回の併合イベント以降に最大時間しきい値を超過すること等を含む。
【0026】
説明する好適な実施形態のさらなる特徴によると、ファイルコマンドを傍受するステップと更新情報を保存するステップは、条件に左右される。例えば、複数の対象アプリケーションに属する一アプリケーションによってファイルコマンドが発行される場合、対象外アプリケーション以外のアプリケーションによってファイルコマンドが発行される場合、ファイルコマンドが一時ファイル以外のファイルに作用する場合、ファイルコマンドが対象ファイルタイプに作用する場合、ファイルコマンドが対象外ファイルタイプのファイルに作用しない場合、またはファイルコマンドが対象蓄積装置に蓄積されたファイルに作用する場合に限り、傍受と保存を行う。
【0027】
保護対象目標ファイルからデータを読み出すシステムの一実施形態はプロセッサを備え、このプロセッサは、ラッパーアプリケーションのコードを蓄積媒体から引き出すように構成され、かつコードを実行するように構成される。ラッパーアプリケーションは、ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するコードを含み、このファイルコマンドは保護対象目標ファイルにアクセスする。また、ラッパーアプリケーションは、ファイルコマンドに関する更新情報を読み出すコードを含む。また、システムは、保護対象目標ファイルを蓄積する第1のメモリ領域と、更新情報を蓄積する第2のメモリ領域とを含む。
【0028】
説明する好適な実施形態のさらなる特徴によると、保護対象目標ファイルを読み出すシステムのラッパーアプリケーションは、保護対象目標ファイルのデータと更新情報とを一時ファイルの中で併合するコードも含む。一時ファイルは更新情報を収容するファイルであり、さもなくば一時ファイルは個別の一時ファイルである。一時ファイルと更新情報は、目標ファイルと同じメモリ装置に蓄積されることもあれば、別個のメモリ装置に蓄積されることもある。
【0029】
保護対象目標ファイルを読み出すためにラッパープログラムを使用する方法の一実施形態は、アプリケーションによって発行される少なくとも1つのファイルコマンドをラッパープログラムで傍受するステップを含み、このファイルコマンドは保護対象目標ファイルにアクセスする。傍受するステップは、コマンドを発行するアプリケーションにとって不可視である。また、この方法は、デルタファイルに蓄積された少なくとも1つのファイルコマンドに関する更新情報を読み出すステップを含む。デルタファイルは、保護対象目標ファイルから独立している。さらに、この方法は、目標ファイルのデータと前述した更新情報とを併合するステップと、併合されたデータをファイルコマンドに対する応答(読み出し結果データ)として返却するステップとを含む。
【0030】
用語
以下の用語は本願において、当業者にとって周知の平易な意味で使われている。しかし、本願の主題を踏まえてさらなる明確化を図るため、これらの用語が本願でどのように使用、適用されているかを説明、詳述、例示する。以下の説明、詳述、例示は排他的なもの、または限定するものと解釈するのではなく、例示的なもの、または代表的なものと解釈するべきであることを理解されたい。以下に説明する用語は、通常の意味と以下の説明に沿って可能な限り広義に解釈するべきものである。
・併合:例えば、デルタファイルに保存された更新情報を、目標ファイルから一時ファイルへコピーされた内容に適用するプロセス(例えば、一時ファイルはデルタファイルであってもよく、あるいは単独の一時ファイルであってもよい)。
・併合イベント:併合プロセスをトリガーするイベント。このイベントは、オペレーティングシステムイベント、例えば、時間本位のオペレーティングシステムイベント、ファイルシステム操作、またはラッパーアプリケーションからの指示に基づく。
・目標ファイルの更新:目標ファイルに更新情報を適用するプロセス(前述したものを参照)。好適な実施形態(以下)では、目標ファイルの一部分を一時ファイルにコピーし、更新情報を一時ファイルに適用し、目標ファイルの一部分を一時ファイル内の対応する更新済みデータに差し替えることによって目標ファイルの更新を行う。
・デルタファイル:例えば、目標ファイルの変更に関係する更新情報を累積するために使われる一時ファイル。
・目標ファイル:何らかの行為、操作、処理等の対象となるファイルであって、ファイルに対する働きかけや作用が実際にあるかどうかは問わない。ここで用いる「目標ファイル」はデータ損傷から保護されるファイルを意味する。
・傍受:例えば、アプリケーションとファイルシステムとの通信、あるいはアプリケーションとオペレーティングシステムとの通信を、監視、チェック、変更、および/またはリダイレクトするプロセス。
・独立したアプリケーション:第1のアプリケーションが第2のアプリケーションに左右されない場合、すなわちこれが意図するように機能するにあたって第2のアプリケーションを必要としない場合、第1のアプリケーションは第2のアプリケーションから独立していると言う。
・ラッパー:例えば、別のアプリケーションとコンピュータシステムとの通信、あるいは1つ以上のアプリケーションと装置との通信を、監視、傍受、および/または制御するアプリケーション。
・データ蓄積装置:例えば、データ処理装置がデータの蓄積と引き出しに用いる装置。データ蓄積装置には設置可能なものと(例えば、ハードディスク)、取り外し可能なものと(例えば、フラッシュディスク)、取り外し可能な媒体(例えば、コンパクトディスク、磁気テープ)がある。
・コマンドの蓄積:本願において「デルタファイルにコマンドを蓄積する」は、コマンドに関する更新情報、すなわち先々のコマンド適用にあたって必要なデータを含む更新情報をデルタファイルに蓄積する操作を意味する。
【0031】
ここでは専ら例示を目的とし、添付の図面を参照しながらデータ損傷からファイルを保護するシステムおよび方法の様々な実施形態を説明する。
【図面の簡単な説明】
【0032】
【図1A】先行技術のファイル蓄積システムの概略図である。
【図1B】目標ファイルを蓄積し保護するシステムの第1の実施形態の概略図である。
【図2】目標ファイルを蓄積し保護するシステムの第2の実施形態の概略図である。
【図3】読み出しコマンドの傍受およびリダイレクトと、目標ファイル読み出しの模擬とを示すフローチャートである。
【図4】一時ファイルに対する更新情報の適用を示すフローチャートである。
【図5】目標ファイルに対する書き込みコールを傍受しリダイレクトするプロセスを示すフローチャートである。
【発明を実施するための形態】
【0033】
種々の実施形態による漸進・透過的ファイル更新の原理および動作は、図面と添付の説明を参照することでよりよく理解できる。
種々の好適な実施形態は、書き込みのためのファイルを開いておく時間を最小限に抑え、ファイルの開放中に予期せぬ事態が起こるリスクを最小限に抑えることにより、データファイルを損傷するリスクを最小限に抑えるシステムを例示するものである。
【0034】
好適な実施形態によると、アプリケーションは保護されたデータファイル(目標ファイル)にアクセスする読み出しコマンドと書き込みコマンドを実施し、目標ファイルは読み出しの場合に限り開く(ファイルをリスクに晒さないプロセス)。これ以降デルタファイルと呼ぶ小さなサービス蓄積領域を開いておき、1つ以上のアプリケーションによる、1つ以上のデータファイル(目標ファイル)に作用する、ファイルコマンドに関する更新情報の蓄積に使用する。同時に、目標ファイルに対する読み出しと書き込みはラッパーアプリケーションによって模擬される。ラッパーアプリケーションは、機能的アプリケーションと装置との通信で、あるいは機能的アプリケーションとオペレーティングシステムとの通信で、基礎的要素を起動、監視、傍受、および模擬する。具体的に、更新情報はどれも1つ以上のデルタファイルに累積される。必要に応じ(例えば、更新済み目標ファイルの読み出しを模擬するため、または目標ファイルを更新する準備として)、蓄積された更新情報と目標ファイルから読み出されたデータを一時ファイルの中で併合する。併合プロセスでは書き込みのための一時ファイルを開き、目標ファイルの一部分または全体を一時ファイルへコピーする。ラッパーアプリケーションが次いでデルタファイルに蓄積された更新情報に基づき一時ファイルを更新する。
【0035】
目標ファイルも時折更新される。目標ファイルを更新するときには、最初に一時ファイルを閉じ、チェックする。次いで、目標ファイルの一部分を一時ファイルで差し替える。このプロセスは、目標ファイルが開いてデータ損傷を被りやすい時間を最小限に抑えることによって目標ファイルをデータ損傷から保護する。さらに、目標ファイルを一時ファイルにコピーしているときに停電が発生しても、目標ファイルは損傷を受けずにすむ。目標ファイルの一部分を更新しているときに停電が発生しても、一時ファイルは損傷を受けずにすむ。
このラッピングプロセスは、ファイルシステムと機能的アプリケーションの双方にとって透明で不可視である。機能的アプリケーションは、ラッパーアプリケーションが存在しない場合とまったく同様に機能する。ファイルシステムは到来するファイルコマンドをすべて、ラッパーアプリケーションが存在しない場合とまったく同様に処理する。
【0036】
このため機能的アプリケーションのプログラマはオペレーティングシステム規格に従って自身のプログラムを記述し、ファイル保護ルーチンに合わせてプログラムを調整する必要はなく、ファイル保護ルーチンを意識する必要すらない。同様に、蓄積装置への書き込み中に中断によるデータ損傷を防ぐルーチンをプログラマがアプリケーションごとに考案する必要はない。
【0037】
ラッパープログラムの働きは機能的アプリケーションやファイルシステムから見えないため、ラッパープログラムは特定の機能的アプリケーションから独立して機能することができる。このため、ラッパープログラムは単独プログラムとして個別に販売でき、任意の機能的アプリケーションによってアクセスされるファイルを保護する。ラッパープログラムは特定の機能的アプリケーションから独立しているため、デバイスドライバに組み入れたり、ユーザがインストールする任意のプログラムからのコマンドに応答するオペレーティングシステムに組み入れたりすることができる。
図1Aは、プロセッサ121aを有する先行技術のデータ処理装置120a(パーソナルコンピュータ等)を示す。プロセッサ121aは、アプリケーション122a(Microsoft Windows(登録商標)Notepadテキストエディタ等)およびファイル管理システム124a(FAT32、NTFS等)を実行する。アプリケーション122aおよびファイル管理システム124aは、プロセッサ121aによって実行されることを伝えるため、プロセッサ121aの中に示されている。
【0038】
アプリケーション122aはファイルコマンド、例えばファイル130aにアクセスする読み出しコール134aを発行する。ファイル130aは可搬型データ蓄積装置126aに蓄積される。読み出しコール134aはファイル管理システム124aによって直接処理される。ファイル管理システム124aは読み出しのためのファイル130aを開き、ファイル130aからデータを読み出し(135a)、そのデータをアプリケーション122aへ送信する(137a)。アプリケーション122aは後に第2のファイルコマンド、すなわちファイル130aに作用する書き込みコール136aを発行する。当業者にとって周知のように、ファイルは通常ならば1組の連続するメモリアドレスに存在するのではなく一連の部分からなり、各部分のアドレスは1組のメモリアドレスポインタによって対応付けられる。具体的に、ファイル130aは3つのセクション130a−i、130a−ii、および130a−iiiからなる。ファイルの修正にあたって追加される情報は、そのファイルに現在割り当てられているメモリに収まらないことがある。そのような場合にファイル全体を別のメモリ範囲へ移す必要はなく、代わりに新たなアドレスをファイルに割り当て、新たなメモリ領域で新規データを書き込む。ファイル管理システム124aは書き込みコール136aを受け取り、書き込みのためのファイル130aを開き、データをファイル130aに直接書き込む(139a)。以上が最新技術である。
【0039】
可搬型データ蓄積装置126a等の装置への書き込み中に混乱が生じると(例えば、停電、可搬型データ蓄積装置126aのソケットからの取り外し、ソフトウェア障害)、開いているファイルから貴重なデータが失われるおそれのあることはよく知られている。したがって、アプリケーション122a等のアプリケーションが書き込みコマンド136a等の書き込みコマンドを発行すると、図1Aのシステムのファイル130aはデータ損失という重大な危険に晒される。
【0040】
図1Bは、データ処理装置120b(パーソナルコンピュータ等)を含む、漸進・透過的ファイル更新システムの第1の実施形態を示すものであり、このデータ処理装置はアプリケーション122b(Microsoft Windows(登録商標)Notepadテキストエディタ等)を実行するプロセッサ121bと、ラッパーアプリケーション150(同じくプロセッサ121b上で実行)と、ファイル管理システム124b(FAT32、NTFS等)とを収容している。アプリケーション122bとラッパーアプリケーション150がプロセッサ121bによって実行されることを伝えるため、図1Bではアプリケーション122bとラッパーアプリケーション150がプロセッサ121bの中に表示されている。
アプリケーション122bはファイルコマンド、例えば可動型蓄積装置126bに蓄積されたファイル130bに作用する書き込みコール136bを発行する。アプリケーション122bは標準的なアプリケーションであって、ファイルコマンド(書き込みコール136bを含む)はどれも標準的なオペレーティングシステムプロトコルに従って発行される。
【0041】
目標ファイル130bは130b−i、130b−ii、および130b−iiiと記された3つの部分からなる。各部分130b−i、130b−ii、および130b−iiiは一連のメモリアドレスを占めている。各部分130b−iおよび130b−iiの最終バイトは、目標ファイル130bの次の部分の最初のアドレスを指し示すポインタである。部分130b−iiiの最終ビットは、ファイル130bの終端を表すストップビットである。書き込みコール136bはラッパーアプリケーション150によって傍受される。この例の書き込みコール136bは部分130b−iiに作用する。書き込みコール136bを検出したラッパーアプリケーション150はチェックを行い、書き込みコール136bが傍受されリダイレクトされるべきものか否かを判断する。図1Bの実施形態の例では、蓄積装置126bが保護の対象となる蓄積装置に該当するタイプのものであること、およびファイル130bが保護の対象となるファイルに該当するタイプのものであることという条件をすべて満たすかどうかによって、書き込みコール136bの傍受とリダイレクトが決まる。この例では、ラッパーアプリケーション150の設定時にユーザがすべての可搬型蓄積装置を保護の対象として指定し、さらに可搬型蓄積装置126bのドライバルーチンでは可搬型蓄積装置126bが可搬型蓄積装置として設定されているため、可搬型蓄積装置126bは対象蓄積装置である。同様に、ファイル130bのタイプは対象ファイルタイプ(.txtファイル)に該当するため、ラッパーアプリケーション150は書き込みコール136bを傍受し、リダイレクトする。
【0042】
システムコールの傍受にはプログラミングの当業者にとって周知の数多くの方法があり、Linux Journal 2006で公表されたNitesh Dhanjani とGustavo Rodriguez-Riveraとによる「Loadable Kernel Module Programming and System Call Interception 」等、コンピュータプログラミングの教則本(Computer programming text book "Loadable Kernel Module Programming and System Call Interception" by Nitesh Dhanjani and Gustavo Rodriguez-Rivera published in the Linux Journal 2006)(非特許文献1)で詳述されている。具体的に、ラッパーアプリケーション150は書き込みコール136bがファイル管理システム124bへ直接送られることを阻止する。代わりに、ラッパーアプリケーション150は、書き込みコール136bに関する更新情報をデルタファイル158に保存することをファイル管理システム124bに命じる(152b)。ファイル管理システム124bは、目標ファイル130bの更新にあたって必要な更新情報をデルタファイル158に書き込む(139b)。図1Bの例で、更新情報は目標ファイル130bへ追加するデータを含む。更新情報は場合によっては編集情報であり(例えば、目標ファイル130b内のある位置から別の位置へデータを移す命令、あるいは目標ファイル130bからデータを削除する命令)、この場合の更新情報が目標ファイル130bにとって新規のデータを含まないことが理解される。また、ファイル管理システムはデルタファイル158が存在しない場合に、最初にデルタファイル158を作成し、その後にデータを書き込む(139b)。ラッパーアプリケーション150は実行中のアプリケーション122bに対し、あたかも目標ファイル130bが更新されたかのように報告し、そうすることで目標ファイル130bへの書き込みを模擬する。模擬書き込みプロセス中に行われる書き込みはすべて、デルタファイル158に対して行われる。目標ファイル130bは修正されず、書き込みのために開くことすらない。ラッパーアプリケーション150が標準オペレーティングシステムプロトコルに従ってファイルコマンドを受信し、オペレーティングシステムによる応答とデータを正確に模擬しながらアプリケーション122bへ応答とデータを返すことを強調する。このため、ラッパーアプリケーション150の活動はアプリケーション122bにとって不可視であり、アプリケーション122bの活動は操作基準に則ったものとなり、ラッパーアプリケーション150が存在しても変える必要はない。
【0043】
図1Bの例で、ラッパーアプリケーション150とアプリケーション122bはいずれも単一のプロセッサ121bによって実行される。そこでラッパーアプリケーションは、コマンド傍受を円滑化するためにアプリケーション122bを包みこむ。アプリケーション122bを「包みこむ(Wrapping)」とは、アプリケーション122bが単独で実行しないことを意味する。ユーザがアプリケーション122bの起動を要求すると、その要求はラッパーアプリケーション150を通過する。ラッパーアプリケーション150はアプリケーション122bを呼び出し、アプリケーション122bはラッパーアプリケーション150の「内部」で実行する(ラッパーアプリケーションによって包みこまれる)(つまり、アプリケーション122bへの入力とアプリケーション122bからの出力はどれもラッパーアプリケーション150を経由する)。
【0044】
アプリケーション122bは後に第2のファイルコマンド、すなわち読み出しコール134bを発行する。読み出しコール134bは、目標ファイル130b、具体的には部分130b−iiにアクセスする。ラッパーアプリケーション150は読み出しコール134bをリダイレクトし、目標ファイル130bにアクセスする第1の読み出しコール134cを発行することによって目標ファイル130bからのデータ読み出しを模擬する。読み出しコール134cはファイル管理システム124bによって処理される。ファイル管理システム124bは読み出しのためのファイル130bを開き、ファイル130bの部分130b−iiからデータを読み出し(135c)、ラッパーアプリケーション150へ読み出し結果データを送信する(137c)。
【0045】
ここでラッパーアプリケーション150は目標ファイル130bに関連するデルタファイル158の有無をチェックし、さらにデルタファイル158内の更新情報が読み出しコール134bの範囲に該当するか否かをチェックする。図1Bの例ではデルタファイル158が存在し、読み出しコール134bの範囲はファイル130bの部分130b−iiに含まれ、デルタファイル158の中には読み出しコール134bの範囲に該当する更新情報が入っている。そこで、読み出しコール134bを履行し最新の読み出し結果データ(模擬読み出し情報)をアプリケーション122bへ返すには、デルタファイル158に蓄積されたファイルコマンド152bに関する更新情報を目標ファイル130bのデータに併合する必要がある。そこで、読み出しコール134bを併合イベントとし、この併合イベントによって、デルタファイル158に蓄積されたコマンドと目標ファイル130bに蓄積されたデータとの併合をトリガーする。ラッパーアプリケーション150は併合を果たすため、デルタファイル158にアクセスする第2の読み出しコール134dを発行する。読み出しコール134dはファイル管理システム124bによって処理される。ファイル管理システム124bは読み出しのためのデルタファイル158を開き、デルタファイル158からデータを読み出し(135d)、読み出し結果データをラッパーアプリケーション150へ送信する(137d)。
【0046】
ラッパーアプリケーション150は、読み出し135dからの更新情報を読み出し135cからのデータに適用することによって読み出し135c−dの読み出し結果データを併合し、併合されたデータを実行中のアプリケーション122bへ送信し(137b)、読み出し要求134bに対する読み出し結果データの返却を模擬する。こうしてラッパーアプリケーションは、目標ファイル130からの更新済みデータの読み出しを模擬する。アプリケーション122bは、ファイル管理システム124bと直接交信しなかったことに気づかない。
【0047】
この時点で、読み出し135c−dからの併合データは、目標ファイル130bの部分130b−iiの更新済みバージョンになっている。この例で、データ処理装置120b上での活動は現在少ないため(自由に使える処理能力が豊富にあって、目標ファイル130を更新しても他のプロセスの妨げとならないため)、ラッパーアプリケーション150は目標ファイル130bを更新する。データが一時ファイルに併合されるたびに目標ファイル130bを更新する必要がないことが理解される。目標ファイル130bを更新するため、ラッパーアプリケーション150はまず、併合済みデータをデルタファイル158に書き込むこと139cをファイルシステム124bに命じる(152c)(デルタファイル158に予め蓄積されたファイルコマンド情報を差し替える)。次に、ラッパーアプリケーション150は、部分130b−iiをデルタファイル158に現在蓄積されている併合済みデータで差し替えることによって(193)、目標ファイル130bを更新することを、ファイルシステム124bに命じる。目標ファイル130bとデルタファイル158はいずれも同じ蓄積装置126bに存在するため、差し替え193にあたっては、部分130b−iiの代わりにデルタファイル158を目標ファイル130bに組み入れるようにアドレスポインタを変更するだけでよい。具体的に、図1Bの例ではデルタファイル158終端のポインタのアドレスを、ファイル130bの部分130b−iiiの先頭を指し示すように設定し、デルタファイル158を閉じる。デルタファイル158が閉じたことをラッパーアプリケーション150がベリファイした後には、書き込みのための目標ファイル130bを開き、目標ファイル130bの部分130b−iの終端のポインタをデルタファイル158の先頭のアドレスを指し示すように設定し、目標ファイル130bを閉じる。最後に、デルタファイル130bの部分130b−iiのメモリ領域を解放し、先々の書き込みコマンドで使用できるようにする。デルタファイル158は完全に目標ファイル130bへ再配置されたため、デルタファイル158の先頭のメモリポインタは蓄積装置126bのディレクトリから取り除かれ、デルタファイル158は事実上削除される。先々書き込みコマンドがある場合は、ラッパーアプリケーション150がデルタファイルを新たに作成する必要がある。
【0048】
図1Bの例では、目標ファイル130bからコピーされたデータとデルタファイル158に蓄積されたコマンドとの併合が読み出しコール134bによってトリガーされる。終止イベントが発生して目標ファイル130bの更新が必要となる場合にも、併合はトリガーされる。目標ファイル130bの更新にあたっては、事前にデルタファイル158に蓄積された更新情報と目標ファイル130bに蓄積されたデータを一時ファイルの中で併合する(前述したように、デルタファイル158が一時ファイルの役割を果たすこともある)。こうすることで一時ファイルは目標ファイル130bのバックアップとして機能し、目標ファイル130bの更新中に停電が発生して目標ファイル130bが損傷する場合でも、一時ファイルから目標ファイル130bのデータを取り戻すことができる。前回の併合から時間しきい値を超過した後に、使用可能なリソース[メモリ領域とプロセッサ時間]がある場合にも、併合をトリガーできる。
【0049】
目標ファイルの更新をトリガーするイベントは数多くある。更新は定期的にトリガーされることもあれば(例えば、15分毎に目標ファイル130bを更新)、終止イベントによってトリガーされることもある。終止イベントは例えば、目標ファイルにアクセスしたアプリケーション122bが終了すること、デルタファイル158が大きくなり過ぎること(サイズしきい値超過)、複合イベント(例えば、前回の更新以降に時間しきい値を超過し、その後に使用可能なリソース(メモリ領域とプロセッサ時間)がある)等を含む。
【0050】
デルタファイル158もまた部分からなり、デルタファイル158の第1の部分で部分130b−iiのファイルコマンドを収容し、デルタファイル158の第2の部分で部分130b−iiiのファイルコマンドを収容できることは、当業者によって理解される。この場合は、部分130b−iiとデルタファイル158の第1の部分を併合し、その後部分130b−iiを更新してファイル130bの部分130b−iiiは元の状態に保ち、デルタファイル158の中に第2の部分だけを残すことができる。同様に、ファイルディレクトリのアドレスポインタやストップビットを変更することによって、ファイルの最初の部分や最後の部分を変更できることが理解される。
【0051】
図1Bの実施形態では、デルタファイル158が目標ファイル130bと同じメモリ(可搬型メモリ装置126b)に蓄積される。デルタファイル158は、データ処理装置120bの高速揮発性メモリ、またはハードディスク、またはデータ処理装置120bの不揮発性メモリ、または別の可搬型蓄積装置、または取り外し可能な媒体(例えば、書き込み可能なコンパクトディスク)に存在する一時ファイルの一部であってもよいことが理解される。同様に、図1Bの実施形態ではラッパーアプリケーション150が計算装置120bの揮発性メモリの一領域で読み出し135c−dのデータを併合することで、事実上、併合済みデータを収容する領域へ読み出しコール134bをリダイレクトする。併合済み情報は任意のメモリ装置に蓄積でき、例えばハードディスク、またはデータ処理装置120bの不揮発性メモリ、または別の可搬型蓄積装置、または取り外し可能な媒体(例えば、書き込み可能なコンパクトディスク)に蓄積できることを理解されたい。
【0052】
図2は、アプリケーション222(Microsoft Visual Studio(登録商標)等)と、ラッパーアプリケーション250と、ファイル管理システム224(FAT32、NTFS等)とを実行するデータ処理装置220(並列プロセッサからなるネットワーク等)を示す。
【0053】
アプリケーション222はファイルコマンド、すなわち蓄積装置226に蓄積されたファイル230に作用する書き込みコール236を発行する。書き込みコール236はラッパーアプリケーション250によって傍受される。図2の実施形態ではラッパーアプリケーション250がプロセッサ221bによって実行されるが、アプリケーション222は別のプロセッサ221aによって、すなわちデータ処理装置220のネットワーク内の一プロセッサによって実行される。ラッパーアプリケーション250は、書き込みコール236に関する更新情報をデルタファイル258に保存することをファイル管理システム224に命じることによって(252)、書き込みコール236をリダイレクトする。ファイル管理システム224は、目標ファイル230の更新にあたって必要となる更新情報だけをデルタファイル258に書き込む(239)。書き込みコール236に関する更新情報はデルタファイル258に保存されるが、目標ファイル230に変化はない。ラッパーアプリケーション250は実行中のアプリケーション222に対し、あたかも目標ファイル230が更新されたかのように報告することで、ファイル230への書き込みを模擬する。図2の例で、デルタファイル258はデータ処理装置220の揮発性メモリに蓄積される。
【0054】
後に「終止イベント」288の発生を検出したラッパーアプリケーション250は(図2の例では、目標ファイル230に作用する書き込みコール236を発行したアプリケーション222の終了が終止イベント288となる)、目標ファイル230を更新する。デルタファイル258はファイル230と同じ蓄積装置226に蓄積されていないため、(図1Bの例のように)データをデルタファイル258にコピーし、デルタファイル258にコピーされたデータに更新情報を適用し、ポインタを変更することによって、目標ファイル230を更新することはできない。目標ファイル230を更新するには、まずはラッパーアプリケーション250が蓄積装置226の一時ファイル292の中で、デルタファイル258に蓄積された更新情報と目標ファイル230のデータとを併合しなければならない。そこでラッパーアプリケーション250は、一時ファイル292を作成すること294と、目標ファイル230の内容を一時ファイル292にコピーすること296と、デルタファイル258に蓄積されたファイルコマンド(書き込みコール236に関する更新情報)を一時ファイル292に適用すること298とを、ファイルシステム224に命じる(290)。併合に成功したラッパーアプリケーション250は、一時ファイル292を閉じることと、目標ファイル230を一時ファイル292で差し替えること293とを、ファイルシステム224に命じる。目標ファイル230と一時ファイル292はいずれも同じ蓄積装置226に既に存在するため、差し替え293にあたっては、一時ファイル292のポインタをファイルディレクトリから削除し、目標ファイル230のポインタ(蓄積されたアドレス)を一時ファイル292のアドレスに変更するだけでよい(これにより、事実上目標ファイル230は更新され、一時ファイル292は削除される)。
【0055】
図2の例で、アプリケーション222はラッパーアプリケーション250と同じプロセッサ221によって実行されていないため、ラッパーアプリケーション250でアプリケーション222を包みこむこと(アプリケーション222の全入出力を制御すること)はできない。そこでラッパーアプリケーション250はファイルシステム224を包みこみ、ファイルシステム224に対するすべてのコールがラッパーアプリケーション250を通過するようにする。これによりラッパーアプリケーション250は、事実上蓄積装置226を包みこむことになる。
場合によってはファイル230が複数のアプリケーションによってアクセスされることが理解される。この場合、それぞれのアプリケーションからの書き込みコマンドはラッパーアプリケーション250によって傍受され、デルタファイル258へリダイレクトされる。同様に、いずれかのアプリケーションによるファイル230を読み出す試みは傍受され、併合イベントをトリガーする。保護対象ファイルに対するアクセスをロックしなければならない先行技術の単一アプリケーションファイル保護方式(Microsoft(登録商標)Wordで採用されているもの等)と違って、ラッパーアプリケーション250なら、目標ファイル230に対する複数のアプリケーションによる同時読み出し/書き込みアクセスが可能であることは当業者によって理解される。
【0056】
ファイルに対するアクセスのロックとファイルアクセス競合の可能性も当業者によって理解される。具体的に、ラッパーアプリケーション150が1つ以上の特定のアプリケーション(例えば、アプリケーション222)だけを包みこみ、ファイルシステム124bを包みこまない図1の実施形態では、単独のアプリケーション(ラッパーアプリケーション150によって包みこまれていないアプリケーション)がラッパーアプリケーション150を経由せずにファイル130bにアクセスする可能性がある。先行技術のソリューション(ファイル130bのロック等)はこのような場合のために存在する(例えば、"Advanced Windows 3rd Edition" by Jeffery Richter, Microsoft Press, Redmond Washington, 1997(具体的には711〜715ページ)(非特許文献2)で説明されているもの)。
【0057】
代替の実施形態において、第1の書き込みコール236の傍受の一部として目標ファイル230から一時ファイル292へデータをコピー296できることを理解されたい。そのような実施形態における一時ファイル292は目標ファイル230の更新バージョンにあたり、その更新は絶えず行われ、目標ファイル230の更新にあたっては一時ファイル292を閉じ、目標ファイル230のアドレスポインタを一時ファイル292のアドレスに移すだけでよい。
図2の例で、プロセッサ221a−bはデータ処理装置220のマルチプロセッサネットワークの構成品である。これとは別のプロセッサ構成も存在し、ファイルを保護するシステムおよび方法の各種実施形態と両立することは当業者によって理解される。例えば、プロセッサ221bはデータ蓄積装置226の内蔵構成品であってもよく、あるいはネットワーク上の専用ファイルシステムサーバの構成品であってもよい。
【0058】
図3は、図2の実施形態の読み出しプロセスの簡略フローチャートを示す。アプリケーション222からの読み出しコマンドはラッパーアプリケーション250によって傍受される(301)。ラッパーアプリケーション250はまず、読み出しコマンドの宛先にあたるファイル230の更新情報を収容するデルタファイルの有無を検査する(302)。デルタファイルが存在しなければファイル管理システム224へ制御が戻り、ファイル管理システム224は、要求された範囲を目標ファイル230から直接読み出し(306)、要求する側のアプリケーション222へ読み出し結果データを返却しながら(309)、先行技術のように読み出しコマンドを処理する。
【0059】
検査302から肯定的結果が出るなら(読み出しの対象となるファイル230の更新情報を収容するデルタファイル258が存在するなら)、ラッパーアプリケーション250はさらに、デルタファイル258の更新情報が読み出しコマンドの範囲に作用するか否かをチェックする(304)。要求範囲に該当する更新情報がなければファイル管理システム224へ制御が戻り、ファイル管理システム224は、要求範囲を目標ファイル230から直接読み出し(306)、要求する側のアプリケーション222へデータを返却しながら(309)、先行技術のように読み出しコマンドを処理する。
【0060】
検査304から肯定的結果が出るなら(デルタファイル258の中にデータ読み出し範囲の更新情報があるなら)、ラッパーアプリケーション250は、デルタファイルにある読み出し範囲のデータと目標ファイルにある更新情報を併合し(308)(目標ファイル230にある読み出し範囲を一時ファイル292へコピーし、デルタファイル258にある更新情報を一時ファイル292内のコピー済みデータに適用する)、要求範囲の併合データを要求する側のアプリケーション222へ返却する(309)。
【0061】
図4は、図2の実施形態による併合プロセスの簡略フローチャートを示す。ラッパーアプリケーション250は終止イベント288の発生を検出し(410)、この終止イベントは、(目標ファイル230の更新に先立ち)併合プロセスを開始する必要があることを意味する。具体的に図4の例では、現在のセッションで目標ファイル230を修正するために少なくとも1つのコマンドを発行したアプリケーション222がユーザによって終了される。装置220のオペレーティングシステムがアプリケーション222を終了しようとしていることを検出したラッパーアプリケーション250は、空の一時ファイル292を開くこと(294)と、目標ファイル230の内容を一時ファイル292へコピーすること(296)とを、ファイルシステム224に命じる(290)。具体的に、図4の例で一時ファイル292へコピーするデータは、書き込みコール236でアクセスすることになっていたデータ範囲である。さらに、ラッパーアプリケーション250は、デルタファイル258に蓄積された更新情報を一時ファイル292に適用すること298を、ファイルシステム224に命じる。具体的に、図4の例では書き込みコール236に関する更新情報がデルタファイル258の中に入っている。デルタファイル258に蓄積された更新情報が一時ファイル292に適用されると(298)、ラッパーアプリケーション250は一時ファイル292を閉じる(411)コマンドを発行し、さらに目標ファイル230の一部分のポインタのアドレスを一時ファイル292のアドレスに変更することによって目標ファイル230の一部分を一時ファイル292で差し替える(293)コマンドを発行する。次に、ラッパーアプリケーション250は、不要になった目標ファイル230の差し替え部分とデルタファイル258のメモリ領域を空き領域として報告するようにファイルシステム224に命じることにより、目標ファイル230の差し替え部分とデルタファイル258とを破棄する(413)。
【0062】
別のアプリケーションがデルタファイル258に書き込んでいるときに併合イベントがトリガーされる場合は、その書き込み操作が完了するまで併合プロセスが保留になる。併合プロセスが完了した後に目標ファイル230に対し新たな書き込みコールがあると、新規のデルタファイルが開く(414)。代わりに、併合プロセスの直後に自動的に新規デルタファイルが開く(414)こともできる。
【0063】
アプリケーション222の終了とは別に、またはアプリケーション222の終了に加えて、併合イベントと解釈される事態には例えば次のものがある。(1)目標ファイル230を閉じるコマンドが発行されること、(2)複数のファイルコマンドに関する統計に基づき条件が成立すること、例えばアプリケーションが1時間の所定期間にわたって蓄積装置226のデータに平均して毎分1回アクセスしていて、その後平均アクセス間隔の30倍にあたる期間(1分の30倍は30分)にわたってアプリケーションが蓄積装置226にアクセスしない状態が続くと、自動的に併合プロセスがトリガーされる、(3)デルタファイル258のサイズが最大サイズしきい値を超過すること(例えば、デルタファイル258に蓄積された更新情報が100キロバイトを超過する場合)、(4)オペレーティングシステムの活動レベルが最低活動しきい値を下回ること(例えば、メモリとプロセッサの使用率が10秒間にわたって50%を下回る場合)、(5)前回の併合イベント以降に最大時間しきい値を超過すること(例えば、いずれかのファイルで前回の併合イベントから15分が経過すると併合プロセスが新たに始まるというルールをラッパーアプリケーション250に設けることができる。このほかに、目標ファイル230を読み出すコマンドの発行も併合イベントをトリガーする(図3の説明にあるように、更新済みデータを読み出すには、目標ファイル230のデータをデルタファイル258の更新情報に併合する必要がある)。)
【0064】
図5は、書き込みプロセスの簡略フローチャートを示す。アプリケーション222はファイルシステム224に向けて書き込みコール236を発行する。ラッパーアプリケーションは書き込みコール236を検出し(540)、ファイル230(書き込みコマンドの宛先にあたるファイル)をチェックし(542)、これが保護の対象となるファイルか否かを判断する。具体的に、図5の例で蓄積装置226は保護対象蓄積装置である。より具体的に、目標ファイル230は装置226に蓄積され、装置226は取り外し可能な可搬型蓄積装置であって、時期尚早な取り外しにより突如予期せぬ混乱が生じることがあるため、目標ファイル230は保護の対象となる。つまりラッパーアプリケーション250は、蓄積装置226で無防備の状態にある全永続ユーザファイルを保護する。より具体的に、書き込みコマンドを発行するアプリケーションが対象外のアプリケーションでない限り(例えば、内部ファイル保護・バックアップ機能を持つMicrosoft(登録商標)Wordは対象外アプリケーションであり、修正されたユーザファイルを蓄積しないAdobe Acrobat(登録商標)リーダもまた対象外である)、あるいは書き込みコマンドが対象外のファイルタイプに作用するものでない限り(例えば、.tmpタイプの一時ファイルでデータが失われてもさほど深刻ではないため、このタイプの一時ファイルは対象外である)、蓄積装置226に対する書き込みコマンドはすべてデフォルトにより傍受され、リダイレクトされる。アプリケーション222が対象外のアプリケーションである場合、または書き込みコマンドの宛先にあたるファイルが対象外のファイルタイプである場合、または書き込みコマンドの宛先にあたるファイルが蓄積装置226にない場合、ファイルシステム224はファイルへ直接書き込む(549)。
【0065】
これとは別に、ファイルコマンドが対象アプリケーションによって発行される場合(対象アプリケーションとは、ラッパーアプリケーション250によってファイルコマンドの傍受が行われるアプリケーションのリストまたはグループに含まれているアプリケーション)、ファイルコマンドが対象外アプリケーション以外のアプリケーションによって発行される場合(対象外アプリケーションとは、ファイルコマンドの傍受が行われないアプリケーションのリストまたはグループに属するアプリケーション)、ファイルコマンドが一時ファイル以外のファイルに作用する場合、ファイルコマンドが対象ファイルタイプに作用する場合(対象ファイルタイプとは、ファイルのタイプが保護を受けるファイルタイプのリストまたはグループに含まれているもの)、ファイルコマンドが対象外ファイルタイプ以外のファイルに作用する場合(対象外ファイルタイプとは、ファイルのタイプが保護を受けないファイルタイプのリストまたはグループに含まれているもの)、ファイルコマンドが保護対象蓄積装置に蓄積されたファイルに作用する場合も、ファイルコマンドを傍受しリダイレクトする条件となる。前述した条件の1つ以上が満たされる場合は、ラッパーアプリケーション250が書き込みコールを傍受し(501)、リダイレクトし(548)、満たされない場合は、図1Aの先行技術ファイルシステムについて説明したように、ファイルシステムがファイルに直接書き込む(549)。
【0066】
図5の例で、ファイル230は蓄積装置226(対象蓄積装置)内の.txtファイル(対象外タイプではない)であって、アプリケーション222はMicrosoft Visual Studio(登録商標)(対象外アプリケーションではない)である。したがって、ラッパーアプリケーションは書き込みコール236を傍受する(501)。次に、ラッパーアプリケーション250は、ファイル230の併合操作が進行中か否かをチェックする(544)。併合操作が進行中なら、併合操作が完了するまで書き込みコマンドプロセスを保留する(546)。併合操作が完了したら、保留になっていた書き込む操作を再開し、書き込みコール236に関する更新情報をデルタファイル258に保存することによって書き込みコマンドの内容をリダイレクトする(548)。併合操作が進行中でなければ、ラッパーアプリケーション250が書き込みコール236をリダイレクトし(548)、デルタファイル258に更新情報を保存する。デルタファイル258への書き込み中に併合イベントがトリガーされる場合は、書き込み操作が完了するまで併合イベントを保留する。
【0067】
要約すると、様々な実施形態とその好適なバージョンをかなり詳しく説明してきたが、他のバージョンも可能である。したがって、添付の特許請求の範囲の精神および範囲は、ここに記載された好適なバージョンの説明に限定されない。

【特許請求の範囲】
【請求項1】
目標ファイルを蓄積しかつ目標ファイルをデータ損傷から保護するシステムであって、 a)ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、前記プログラムコードは、
i)別のアプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するコードであって、前記少なくとも1つのファイルコマンドは目標ファイルに作用し、前記ラッパーアプリケーションは前記別のアプリケーションから独立しているコードと、
ii)前記少なくとも1つのファイルコマンドに関する更新情報を保存するコードと、
iii)前記更新情報に従い目標ファイルを更新するコードと、を含むプロセッサと、
b)目標ファイルを蓄積する第1のメモリ領域と、
c)前記更新情報を蓄積する第2のメモリ領域と、
を備えるシステム。
【請求項2】
請求項1記載のシステムにおいて、
前記第1のメモリ領域は、データ処理装置の不揮発性メモリ内にあるシステム。
【請求項3】
請求項2記載のシステムにおいて、
前記第2のメモリ領域は、前記データ処理装置の前記不揮発性メモリと、前記データ処理装置の別個の不揮発性メモリと、前記データ処理装置の揮発性メモリとからなるリストから選ばれた少なくとも1つのメモリ内にあるシステム。
【請求項4】
請求項1記載のシステムにおいて、
前記第1のメモリ領域は、可搬型データ蓄積装置の不揮発性メモリ内にあるシステム。
【請求項5】
請求項4記載のシステムにおいて、
前記第2のメモリ領域は、前記可搬型データ蓄積装置の前記不揮発性メモリと、データ処理装置のメモリと、前記可搬型データ蓄積装置の揮発性メモリとからなるリストから選ばれた少なくとも1つのメモリ内にあるシステム。
【請求項6】
請求項1記載のシステムにおいて、
前記更新情報は、前記少なくとも1つのファイルコマンドに関するデータのみを含むシステム。
【請求項7】
請求項1記載のシステムにおいて、
e)一時ファイルを蓄積する第3のメモリ領域をさらに備え、
前記ラッパーアプリケーションは、
iv)目標ファイルの少なくとも一部分を前記一時ファイルにコピーするコードと、 v)前記更新情報を前記一時ファイルに適用するコードと、
vi)目標ファイルの前記少なくとも一部分を前記一時ファイルで差し替えるコードと、
をさらに含むシステム。
【請求項8】
目標ファイルをデータ損傷から保護するためのラッパープログラムを使用する方法であって、
a)アプリケーションによって発行される少なくとも1つのファイルコマンドをラッパープログラムによって傍受するステップであって、前記少なくとも1つのファイルコマンドは目標ファイルに作用し、前記傍受するステップは前記アプリケーションにとって不可視であるステップと、
b)目標ファイルを変えることなく前記少なくとも1つのファイルコマンドに関する更新情報を保存するステップと、
c)前記更新情報により目標ファイルを更新するステップと、
を含む方法。
【請求項9】
請求項8記載の方法において、
前記少なくとも1つのファイルコマンドは、前記保存することの開始から前記更新することの終了までの間に前記アプリケーションによって発行されて目標ファイルに作用するすべての書き込みコマンドを含む方法。
【請求項10】
請求項8記載の方法において、
前記更新するステップは、
i)目標ファイルの少なくとも一部分を一時ファイルにコピーするステップと、
ii)前記更新情報を前記一時ファイルに適用するステップと、
iii)目標ファイルの前記少なくとも一部分を前記一時ファイルの少なくとも一部分で差し替えるステップと、
を含む方法。
【請求項11】
請求項10記載の方法において、
d)前記適用するステップの後に前記更新情報を収容するデルタファイルを削除するステップをさらに含む方法。
【請求項12】
請求項8記載の方法において、
前記更新するステップは、
i)目標ファイルを閉じるコマンドが発行されることと、
ii)前記アプリケーションが終了することと、
iii)目標ファイルにアクセスしたアプリケーションが終了することと、
iv)複数のファイルコマンドに関する統計に基づき条件が成立することと、
v)オペレーティングシステムの活動レベルが最低活動しきい値を下回ることと、
vi)前記少なくとも1つのファイルコマンドの発行以降に最大時間しきい値を超過することと、
vii)前回の併合イベント以降に最大時間しきい値を超過することと、
からなるグループから選ばれた少なくとも1つの終止イベントが発生する場合に実行される方法。
【請求項13】
請求項8記載の方法において、
前記傍受するステップと保存するステップは、前記アプリケーションが複数の対象アプリケーションのひとつであることと、前記アプリケーションが対象外アプリケーション以外であることと、前記少なくとも1つのファイルコマンドが一時ファイル以外のファイルに作用することと、前記少なくとも1つのファイルコマンドが対象ファイルタイプに作用することと、前記少なくとも1つのファイルコマンドが対象外ファイルタイプ以外のファイルに作用することと、前記少なくとも1つのファイルコマンドが対象蓄積装置に蓄積されたファイルに作用することと、からなるグループから選ばれた少なくとも1つの条件に左右される方法。
【請求項14】
保護対象目標ファイルからデータを読み出すシステムであって、
a)ラッパーアプリケーションのプログラムコードを引き出しかつ実行するように構成されたプロセッサであって、前記プログラムコードは、
i)前記ラッパーアプリケーションから独立したアプリケーションによって発行される少なくとも1つのファイルコマンドを傍受するコードであって、前記少なくとも1つのファイルコマンドは保護対象目標ファイルにアクセスするコードと、
ii)前記少なくとも1つのファイルコマンドに関する更新情報を読み出すコードと、を含むプロセッサと、
b)保護対象目標ファイルを蓄積する第1のメモリ領域と、
c)前記更新情報を蓄積する第2のメモリ領域と、
を備えるシステム。
【請求項15】
請求項14記載のシステムにおいて、
前記ラッパーアプリケーションは、
iii)前記保護対象目標ファイルのデータと前記更新情報とを一時ファイルの中で併合するコードをさらに含むシステム。
【請求項16】
保護対象目標ファイルを読み出すためのラッパープログラムを使用する方法であって、
a)アプリケーションによって発行される少なくとも1つのファイルコマンドをラッパープログラムによって傍受するステップであって、前記少なくとも1つのファイルコマンドは保護対象目標ファイルにアクセスし、前記傍受するステップは前記アプリケーションにとって不可視であるステップと、
b)デルタファイルに蓄積された前記少なくとも1つのファイルコマンドに関する更新情報を読み出すステップであって、前記デルタファイルは保護対象目標ファイルから独立しているステップと、
c)目標ファイルのデータと前記更新情報とを併合するステップと、
d)前記少なくとも1つのファイルコマンドに対する応答として前記併合の結果を返却するステップと、
を含む方法。

【図1A】
image rotate

【図1B】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2010−511926(P2010−511926A)
【公表日】平成22年4月15日(2010.4.15)
【国際特許分類】
【出願番号】特願2009−538853(P2009−538853)
【出願日】平成19年11月29日(2007.11.29)
【国際出願番号】PCT/IL2007/001479
【国際公開番号】WO2008/068742
【国際公開日】平成20年6月12日(2008.6.12)
【出願人】(508159260)サンディスク アイエル リミテッド (33)
【Fターム(参考)】