1

C++ で実行してファイルをブロックに分割し、SQLITE3 データベースで md5 ハッシュを使用してブロックを追跡するオフサイト バックアップ ソリューションがあります。そして、ブロックをデータベースとともにリモート サイトに転送します。

したがって、復元を実行したい場合は、SQLITE3 データベースにクエリを実行し、それに応じてブロックを復元します。

最初のバックアップが実行されると、base_backup という大きなテーブルが作成されます。以降のすべてのファイル変更または新しいファイルは、新しいテーブルに新しいレコードとして追加されます。復元したい場合は、base_backup テーブルとすべての相違点を照会して、ファイルを復元します。

バックアップの実行方法として、指定されたフォルダー内のすべてのファイルをスキャンしてアーカイブ ビットを探します。アーカイブ ビットがクリアされている場合は、データベースにレコードがまだ存在しないかどうかを確認し、バックアップするかどうかを決定します。

私の質問になりますが、ファイルがローカル コンピューターで削除された場合、それを追跡し、それに応じてオフサイト バックアップを更新するにはどうすればよいですか? 復元を行うときに、すべてのガベージ ファイルを復元したくないからです。ファイルがフォルダから削除されたかどうかを知る方法はありますか? 時間がかかりすぎるため、データベースから検証チェックを実行したくありません。

4

3 に答える 3

1

で通知IN_DELETEますか?

于 2011-03-25T14:58:22.533 に答える
0

ディレクトリを監視するサービスを作成します(FindFirstChangeNotificationまたはReadDirectoryChangesWを使用)

于 2011-03-25T16:51:06.847 に答える
0

最後のバックアップ中に存在したファイルをリストする新しい情報をデータベースに追加できます。次に、ファイルが変更されていなくても、バックアップ中に新しい (小さな) エントリが作成され、それがまだ存在していることを示します。

過去の特定の日付からバックアップを復元する場合は、以前のバックアップ中に存在したことを示すエントリを持つファイルのみを選択します。

たとえば、次のようなテーブルのペアが機能する可能性があります。

Path(text)    BackupIndex(int)
path/to/file1  1
path/to/file2  1
path/to/file1  2

path/to/file2バックアップ中にディレクトリになかったので、バックアップ #2 には表示されないことに注意してください (削除されている必要があります)。

BackupIndex(int)    Timestamp(timestamp)
1                   2011-03-12 7:42:31 UTC
2                   2011-03-20 8:21:56 UTC

誰かが 3 月 15 日に存在していたファイルを復元したいと考えている場合、バックアップ インデックスのテーブルを見て、バックアップ #1 が最新であることを確認し、パス テーブルからバックアップ 1 に存在するすべてのパスを調べます。

したがって、基本的には、ファイルが削除されたかどうかの判断を、バックアップ操作ではなく復元操作に先送りしています。

于 2011-03-28T13:38:29.523 に答える