【发布时间】:2011-02-16 20:33:33
【问题描述】:
我有一个使用 rdiff 进行在线备份的产品。目前发生的情况是:
将文件复制到暂存区(这样文件在我们处理时不会消失或被修改)
散列原始文件,并计算 rdiff 签名(用于差异差异) 计算 rdiff delta 差异(如果我们没有之前的版本,则跳过此步骤)
压缩和加密产生的差异差异
目前,这些阶段的执行方式各不相同。最终结果是我们多次迭代文件。对于小文件,这没什么大不了的(尤其是考虑到磁盘缓存),但对于大文件(10 甚至 100 GB)来说,这是一个真正的性能杀手。
我想将所有这些步骤整合到一个读/写通道中。
为此,我们必须能够以流方式执行上述所有步骤,同时仍保留所有“输出”——文件哈希、rdiff 签名、压缩和加密的增量差异文件。这将需要从源文件中读取一个数据块(比如 100k?),然后在内存中迭代文件以更新哈希、rdiff 签名、进行增量差分,然后将输出写入压缩/加密输出流.目标是大大减少我们所做的磁盘抖动量。
目前我们使用 rdiff.exe(它是底层 librsync 库之上的一个薄层)来计算签名并生成二进制增量。这意味着这些是在一个单独的过程中完成的,并且是一次性完成的,而不是流式的。
如何使用 librsync 库完成我需要的工作?
【问题讨论】:
标签: python diff backup-strategies delta