这个问题对谷歌来说很难,因为由 rsync生成了日志文件,这不是我感兴趣的。
我想要做的是使用rsync从一组服务器中检索日志文件。通常情况下,当我想从我的家庭服务器到笔记本电脑的一堆个人文件时,我会按照以下方式做一些事情:
rsync --rsh='ssh' -av --progress --partial user@host:source destination
要说我的假期视频,以显示我的家人。但我现在想使用rsync将文件从服务器检索到备份位置。由于我的日志文件只是附加,并经常写入,有没有办法使rsync足够智能“跟随”更改而不是一遍又一遍地重新验证初始的百万行?如果没有,那么人们会使用另一个应用吗?我不想使用UDP连接,因为我希望能够在不丢失数据的情况下处理流量峰值,而TCP也会太慢,所以我想做一些本地文件,备份会在不活动期间赶上。< / p>
答案 0 :(得分:1)
我遇到了同样的问题。我想使用rsync
建立日志集中化。问题是,每当源日志文件获取更新时,rsync
会将整个日志文件传输到远程服务器并删除旧的。这种行为是如此详尽无遗,这让我失去了理智。
结果是,rsync
有一个--append
标志,该标志允许rsync
仅更新日志文件的“新部分”。 (我仅在日志文件上进行过测试)
从手册页:
-将数据追加到较短的文件中
-追加
这会导致rsync通过将数据附加到文件末尾来更新文件,这假定接收方已经存在的数据与发送方文件的开头相同。如果文件需要传输并且接收方的大小等于或大于发送方的大小,则跳过该文件。当不需要传输文件时,这不会干扰文件非内容属性(例如,权限,所有权等)的更新,也不会影响任何非常规文件的更新。表示--inplace,但与--sparse不冲突(因为它始终会扩展文件的长度)。
例如
rsync -avz --append /source/dir /dest/dir
它不会重新验证整个文件,而只会附加更改。
答案 1 :(得分:0)
在阅读rsync
的源代码后,我确定:
rsync
的工作方式是读取文件并计算文件块的哈希值,并将它们发送回与哈希值匹配的调用进程。但它确实看起来每次读取一个完整的文件,即使它没有占用那么多的带宽。现在我将使用logrotate
解决方案,但我还没有回答这个问题,因为我仍然确信必须有一个更好的解决方案才能解决问题。框。