我有一个异地备份解决方案,它在C ++上运行以将文件分成块,并使用SQLITE3数据库上的md5哈希跟踪块。它将块与数据库一起传输到远程站点。
因此,当我想进行恢复时,它会查询SQLITE3数据库并相应地恢复块。
第一次备份运行时,会创建一个名为base_backup的大表。每个后续文件都会更改,或者新文件将作为新记录添加到新表中。如果我想进行恢复,我会查询base_backup表以及所有差异并恢复文件。
备份运行的方式,它会扫描给定文件夹中存档位的所有文件,如果已清除,则验证数据库中是否已存在记录,并决定是否备份它或不。
回答我的问题,如果在本地计算机上删除了某个文件,我该如何跟踪它并相应地更新异地备份?因为当我进行恢复时,我不想恢复所有的垃圾文件。无论如何知道文件是否已从文件夹中删除?我不想从数据库运行验证检查,因为它需要太长时间。
答案 0 :(得分:1)
inotify与IN_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中存在的所有路径。
基本上,您正在推迟决定是否将文件删除到还原操作,而不是备份操作。