我希望能够以编程方式告知 CrashPlan 是否已备份特定文件,包括该文件的当前更新。即,文件的当前内容已备份。
判断 CrashPlan 上次备份文件的时间相对容易:其文件名出现在 /usr/local/crashplan/log/backup_files.log.0 中,并且一些准确性,我可以将备份时间与文件的最后修改时间进行比较,但这种方法似乎有些可疑。
我能想到几种方法,但我不知道如何做:
将当前文件与 CrashPlan 的关于该文件的元数据进行比较。这需要了解 CrashPlan 的“缓存”文件的格式以及所使用的哈希系统。这可能可以通过 CLI 实现,但 CLI 只是 GUI 的门户,我需要一些可编写脚本的东西。
将文件还原到临时目录并进行比较。遗憾的是,没有 CLI 可以进行还原;GUI 是唯一的方法。
我将描述我想要实现的目标。如果知道如何实现上述目标就好了,即使有其他方法可以实现以下目标:
我使用 CrashPlan 连续备份我的 PostgreSQL 数据库,使用 WAL 存档。在当前配置中,存档命令将文件复制到存档目录,该目录由 CrashPlan 备份。我时不时地手动确认(或只是相信)一组 WAL 已备份,并将它们从存档目录中删除,偶尔通过 GUI 进行恢复,以确保我可以检索当前和“已删除”的 WAL。xlog 目录也已备份,因此即使 PostgreSQL 尚未存档特定的 xlog,我也有很大机会进行近乎完整的恢复。
我希望能够自动化这个过程,这需要确认备份状态和最近程度,或者为了比较目的而自动执行恢复。
(作为奖励,如果该方法值得信赖,我可以将“archive_command”从“复制到存档目录”转变为“确认 CrashPlan 已备份当前版本”,并完全取消存档目录)。
(是的,除了上述内容之外,我还在进行常规的 pg_dumpall。)
答案1
恐怕这是不可能的。对于消费者版本来说肯定不可能,我对商业/企业版本不熟悉。
部分问题在于数据在本地加密,所以我认为你不能简单地从缓存中提取任何有用的内容。
我认为你正在寻找错误的工具。我建议研究一个更有针对性的备份工具,也许是一个有特定 Postgres 代理的工具。
答案2
我编写了一个简单的脚本来实现这个功能。但是它通过比较备份时间和文件的最后修改时间来实现。这是我找到的唯一解决方案。下面是我的博客文章链接和相应的要点:
https://gist.github.com/bougui505/ba9db84a2fc6f9330f3ccf32a352a98e#file-backup_stat-sh