大量文件的inotify和rsync

时间:2013-12-04 08:36:29

标签: rsync sysadmin inotify

我正在使用inotify来查看目录并使用rsync在服务器之间同步文件。同步工作完美,内存使用大多不是问题。但是,最近添加了大量文件(350k),这对性能产生了影响,特别是在CPU上。现在,当rsync运行时,CPU使用率达到90%/ 100%并且rsync需要很长时间才能完成,有650k文件正在被监视/同步。

有没有办法加速rsync,只有rsync已更改的目录?或者在不同的目录上设置多个inotifywaits。正在使用的脚本如下。

更新:我添加了--update标志,用法似乎基本没有改变

#! /bin/bash

EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"

inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' | (
WAITING="";
while true; do
    LINE="";
    read -t 1 LINE;
    if test -z "$LINE"; then
        if test ! -z "$WAITING"; then
                echo "CHANGE";
                WAITING="";
                rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
        fi;
    else
        WAITING=1;
    fi;
done)

2 个答案:

答案 0 :(得分:1)

我最终删除了压缩选项(z)并将WAITING var增加到10(秒)。这似乎有所帮助,rsync仍然会加剧CPU负载,但它的寿命较短。信用转到unix stackexchange

的答案

答案 1 :(得分:0)

您正在使用rsync来同步大树的根目录,因此我对性能损失并不感到惊讶。
一种可能的解决方案是仅同步更改的文件/目录,而不是整个根目录 例如, file1 file2 file3 位于 from / dir 下。对这3个文件进行更改时,请使用

  从/ dir / file2 / dir / file3到/ dir

的/ dir / file1中的rsync --update -alvzr

而不是

  

rsync --update -alvzr从/ dir / *到/ dir

但是这有一个潜在的错误:如果目标文件夹不存在,rsync将不会自动创建目录。但是,您可以使用ssh执行远程命令并自己创建目录 您可能还需要设置SSH公钥验证,但根据您粘贴的rsync命令行,我假设您已经完成了此操作。

参考:
rsync - create all missing parent directories?
rsync: how can I configure it to create target directory on server?
How to use SSH to run a shell script on a remote machine?
SSH error when executing a remote command: "stdin: is not a tty"