Rsync

對大量文件進行 inotify 和 rsync

  • December 18, 2013

我正在使用 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)

我最終刪除了壓縮選項(z)並將 WAITING var 提高到 10(秒)。這似乎有所幫助,rsync 仍然會增加 CPU 負載,但它的壽命較短。歸功於 unix stackexchange上的答案

您還可以查看具有更多選項的lsyncd 。您可以使用 lua 腳本,然後說出它需要使用多少並發程序,也許還有更多可能感興趣的事情。

這也使用 rsync 和 ionotify。

引用自:https://serverfault.com/questions/559450