1

我有一个在 C++ 上运行的异地备份解决方案,可以将文件分成块,并使用 SQLITE3 数据库上的 md5 哈希跟踪块。并将块与数据库一起传输到远程站点。

因此,当我想要进行还原时,它会查询 SQLITE3 数据库并相应地还原块。

当第一个备份运行时,它会创建一个名为 base_backup 的大表。每个后续文件更改或新文件都作为新记录添加到新表中。如果我想进行恢复,我会查询 base_backup 表以及所有差异并恢复文件。

备份运行的方式,它扫描给定文件夹中的所有文件以查找存档位,如果它被清除,则验证数据库中是否不存在记录并决定是否备份它。

来到我的问题,如果在本地计算机上删除了文件,我如何跟踪它并相应地更新异地备份?因为当我进行还原时,我不想还原所有垃圾文件。是否知道文件是否已从文件夹中删除?我不想从数据库运行验证检查,因为它需要太长时间。

4

3 回答 3

1

通知IN_DELETE?_

于 2011-03-25T14:58:22.533 回答
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 回答
0

创建一个服务来监控目录(使用 FindFirstChangeNotification 或 ReadDirectoryChangesW)

于 2011-03-25T16:51:06.847 回答