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