4

いくつかの解決策はおそらく Windows に適用できる可能性がありますが、私は Windows OS に詳しくないため、これは Linux に焦点を当てたものになります。

私の知る限り、Unix ファイル システムにはすべて、ファイル システムのメタデータと「ファイル」が格納される inode の概念があります。したがって、名前が変更されたり移動されたりしたファイルを追跡するために、iノード番号と追加情報を使用できるかどうか疑問に思っていますか?

私が提案していたのは、ファイル名/パスのデータベース、それが配置されているディスク/ドライブ、i ノード番号、そして最後にある種のチェックサム (sha-1) を作成する初期スキャンを行うことでした。

これにより、システムは inode 番号を使用して、ファイルが移動または名前変更されたかどうかをすばやく検出できるようになり、チェックサムを追跡して、実際に同じファイルであるかどうかを確認できます。

このスキームにはいくつかの問題がある可能性があります。

  1. ファイルが変更されてから移動/名前変更される可能性がありますが、チェックサムが一致しないため、ファイルを検出できませんでした。
  2. 一部の (ほとんどの?) アプリケーションは、ファイルを変更するときに新しい一時ファイルを作成し、それを現在のファイルに切り替えるため、ファイルが最後に変更されていない場合でも inode は一致しません。
  3. 各ファイル システムの inode はそのファイル システムに固有であるため、どのデバイス/ファイル システム上にあるかを保存する必要があります。
  4. ハードリンクに対処する必要がある

ここで忘れている他の問題があるかどうか疑問に思っていますか? iノードを使用して、移動または名前変更されたファイルをすばやく追跡し、チェックサムを追跡して、実際に同じファイルであることを確認できるようにしたいと考えていました。

4

3 に答える 3

8

inotify指定したファイル システムまたはディレクトリ内のファイルに対して誰かが何かを行ったときに、呼び出しを受けることができるものを調べてください。

于 2010-08-18T17:24:50.037 に答える
0

これはファイルシステムに依存することに注意してください。ext3 および同様のファイルシステムでは実行可能ですが、他のファイルシステムでは実行できない可能性があります。これは、すべての inode をチェックするためにディスク全体をスキャンする必要があるため、おそらくかなりリソースを消費する操作でもあります。そのため、inode が変更されたときに通知されるように解決策を探す必要があります (すべてをスキャンするのではなく)。

于 2010-08-18T17:25:16.617 に答える