linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各種變化情況,如文件存取、刪除、移動、修改等。利用這一機制,可以很方便地實現文件異動警告、增量備份,並針對目錄或文件的變化及時作出響應。
將rsync工具與inotify機制相結合,可以實現觸發式備份(實時同步)——只要原始位置的文件發生變化,則立即啓動增量備份操作,否則處於靜默等待狀態。這樣,就避免了按固定週期備份時存在的延遲性,週期過密等問題。
配置過程:
1、調整inotify內核參數:
在linux內核中,默認的inotify提供了三個跳空參數:max_queue_events、max_user_instances、max_user_watches,分別表示監控事件隊列(16384)、最多監控實例數(128)、每個實例最多監控文件數(8192)。
當要監控的目錄、文件數較多或變化較頻繁時,建議加大這三個參數的值。例如,可直接修改/etc/sysctl.conf配置文件,將管理隊列設爲32768,實例數設爲1024,監控數設爲1048 576(建議大於監控目標的總文件數)。
2、安裝inotify-tools
使用inotify機制還需要安裝inotify-tools,以便提供inotifywait、inotifywatch輔助工具程序,用來監控,彙總改動情況。inotify-tools可以從網站http://inotify-tools.sourceforge.net/下載。
我是在http://download.csdn.net/download/mchdba/7564775這裏下載的。
接着make && make install
以監控網站目錄 /var/www/html爲例,可以先執行inotifywait命令,然後在另一個終端向/var/www/html目錄下添加文件、移動文件、跟蹤屏幕輸出結果。其中選項“-e”用來指定要監控哪些事件,選項“-m”表示持續監控,選項“-t”表示遞歸整個目錄,選項“-q”簡化輸出信息。
inotifywait可監控modify(修改)、create(創建)、move(移動)、delete(刪除)attrib(屬性更改)等各種事件,一有變動立即輸出結果,inotifywatch可用來手機文件系統變動情況,並在運行結束後輸出彙總的變化情況,關於這兩個命令的詳細用法可以參照man手冊頁,配置觸發備份任務時只要用到inotifywait就可以了。
3、編寫觸發式同步腳本:(轉載)
#!/bin/sh
src=/data/www/wwwroot/ #A上的需要備份的文件路徑
des=linuxhome #B上備份文件的路徑 daemon別名
ip=192.168.1.101 #B的IP地址
user=linux
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ \
-e modify,delete,create,attrib \
#echo “ {src} was rsynced”
#echo “—————————————————–”
done
注:–password-file存放用戶${user}的密碼
將rsync.sh添加到開機啓動:
sed -i ‘$i \/usr/local/sbin/rsync.sh’ /etc/rc.local
寫法二:
cd /usr/local/sbin
vi rsync.sh //分別在兩臺機器上創建如下腳本,另一臺改一下IP地址即可.
!/bin/sh
src=/data/www/wwwroot/
des=/data/www/wwwroot
ip=192.168.1.101
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ \
-e modify,delete,create,attrib \
#echo “${src} was rsynced”
#echo “—————————————————–”
done