增量备份:如何跟踪文件删除

时间:2011-03-25 14:54:13

标签: c++ backup database-backups backup-strategies remote-backup

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

inotifyIN_DELETE

答案 1 :(得分:0)

创建服务以监控目录(使用FindFirstChangeNotification或ReadDirectoryChangesW)

答案 2 :(得分: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中存在的所有路径。

基本上,您正在推迟决定是否将文件删除到还原操作,而不是备份操作。