将rsync输出到文件

时间:2011-10-22 06:01:21

标签: diff rsync lvm

是否可以将输出(原始数据,无日志记录)传输到rsync文件,并将其保存到bsdiff?由于缺乏配置和愚蠢的语法(缩进,wtf?)和rdiff有点不稳定,我觉得rsnapshot非常恼火。

我有一个工作解决方案,我将所有数据都复制过来,制作一个tar.gz-archive和bsdiff,在两个tar.gz-archives之间生成一个补丁。但是这对于巨大的负载和非常密集的磁盘来说都是CPU密集型的,因为每次都必须制作整个存档。

总结一下:   - 进行初始rsync   - bsdiff它对抗以前的文件   - 以一种易于恢复的方式存档差异

当我写这篇文章时,我对lvm-snapshot有了一个想法,任何关于我应该怎么做的人呢?

1 个答案:

答案 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是多么容易,但我希望这不是你坚持的部分。