是否可以将输出(原始数据,无日志记录)传输到rsync文件,并将其保存到bsdiff?由于缺乏配置和愚蠢的语法(缩进,wtf?)和rdiff有点不稳定,我觉得rsnapshot非常恼火。
我有一个工作解决方案,我将所有数据都复制过来,制作一个tar.gz-archive和bsdiff,在两个tar.gz-archives之间生成一个补丁。但是这对于巨大的负载和非常密集的磁盘来说都是CPU密集型的,因为每次都必须制作整个存档。
总结一下: - 进行初始rsync - bsdiff它对抗以前的文件 - 以一种易于恢复的方式存档差异
当我写这篇文章时,我对lvm-snapshot有了一个想法,任何关于我应该怎么做的人呢?
答案 0 :(得分:0)
rsync(1)
可以轻松使用不同的shell; -e ssh
是默认设置,但您可以编写一个启动ssh
的包装程序,并将您转发的所有内容的副本保存到ssh
。
我正在考虑的一些伪代码:
in[2] = pipe
out[2] = pipe
err[2] = pipe
fork
if child, fork
grandparent /* ssh */
close 0, 1, 2
dup2 in[0], 0
dup2 out[1], 1
dup2 err[1], 2
close in, out, err
exec(ssh, hostname, rsync) -- copy from rsync itself
parent /* stdin -> pipe */
close in[0], out, err, 1, 2
open (log, "/path/to/log", "w")
loop forever:
read(0, buf)
write(in[1], buf)
write(log, buf)
child /* pipe -> stdout, stderr */
close in, out[1], err[1], 0
loop forever:
read(out[0], bufout)
write(1, bufout)
read(err[0], buferr)
write(2, buferr)
在执行此操作之前,请仔细检查pipe(2)
,dup2(2)
和close(2)
来电;我相信我正确地连接了描述符并关闭了每个进程中未使用的描述符,但这有点微妙。
我不知道将结果文件应用到远程端点的tarball是多么容易,但我希望这不是你坚持的部分。