增量備份方式若透過日常排程的方式來進行,可能會發生備份資料不一致的落差,若能改用即時備份的解決方案,在來源端的資料發生異動時,就立即把資料備份至目的端,問題就能夠圓滿解決。這裡使用Linux核心內建的inotify模組以及rsync備份程式來實際示範即時備份的操作。
inotify模組可利用proc系統檔案的方式來動態調整相關的組態,可查看「/proc/sys/fs/inotify」目錄下的檔案,如圖1所示。而相關組態說明,說明如下:
|
▲圖1 查看「/proc/sys/fs/inotify」目錄下的檔案。 |
max_queued_events:設定個別的實例可允許放入隊列中的監控事件(Event)最大個數,就表示每個實例所監控的檔案或目錄,異動的次數在短時間內不能超過此組態所設定的值,預設為16384。
max_user_instances:指定每一個使用者最大可建立的實例個數,預設為128。
max_user_watches:設定每個實例最大能監控之檔案和目錄的個數,預設8192。
在說明過inotify模組後,接著介紹操作inotify模組所使用的程式inotify-tool。
認識inotify-tool程式
inotify-tool是一種以C語言所寫的工具集,可用來與inotify模組結合,提供監控主機檔案系統上的檔案與目錄是否變動的功能。
安裝inotify-tool的過程相當簡單,利用如下指令即可完成安裝:
yum install -y epel-release
yum install -y inotify-tools
yum install -y inotify-tools-devel
安裝完成後,inotify-tool主要提供inotifywait和inotifywatch兩個程式。inotifywait是監控檔案或目錄異動的主要程式,inotifywatch則為統計所監控目錄異動的次數程式。其中,inotifywait的使用語法如下:
inotifywait [組態選項] <被監控的檔案
或目錄名稱> [組態選項]
inotifywait所使用的參數與功用,包括以下幾項:
-r:設定採用遞迴(Recursive)的方式監控所設定的目錄,即表示監控該目錄下所有的子目錄。
-m:設定持續的監控目錄或檔案,如果未設定此選項,就代表在接收到一次事件後便會退出。
-d:設定在背景程式(Daemon)持續地監控目錄或檔案。
-e:設定要監控檔案或目錄的事件,其中常用的事件包括:access(偵測所監控的檔案或目錄是否發生讀取的情況)、modify(偵測所監控的檔案或目錄是否發生修改的情況)、attrib(偵測所監控的檔案或目錄是否有屬性被改變的情況)、close_write(偵測所監控的檔案,例如以writeable可寫的模式開啟,是否有被關閉的情況)、close_nowrite(偵測所監控的檔案以read only唯讀的模式開啟,是否有被關閉的情況)、close(偵測所監控的檔案是否已關閉)、open(偵測所監控的檔案是否開啟)、moved_to(偵測是否有其他的檔案或目錄移動到所監控的目錄)、moved_from(偵測是否有檔案或目錄從所監控的目錄時移到別個目錄)、move(偵測所監控的檔案或目錄是否有發生搬移)、create(偵測所監控的目錄是否有發生新建檔案或目錄)、delete(偵測所監控的目錄是否有刪除檔案或目錄)。
--exclude:利用正規表示法來排除欲監控的檔案或目錄。
-t:設定欲監控的時間長度(單位為秒),如果在設定監控的時間長度中。所監控的檔案或目錄並沒發生異動,便解除監控狀態。
如下的指令將測試以inotifywait來監控某個目錄(包括子目錄)是否有新增檔案為例:
inotifywait -r -e create /var/log/
此時,在「var/log/」目錄下新增了一個名稱為「hello」的檔案,便會發現inotifywait已經有效地發現一個新增事件,如圖2所示。
|
▲圖2 在「var/log/」目錄下新增一個hello檔案。 |
由於inotifywait並未直接提供呼叫行動程式的機制,當偵測到檔案系統發生變化並不能直接呼叫行動程式來處理,因此這裡利用間接的方式來加上呼叫行動程式的機制,相關Script程式內容如下所示:
while true #設定一個無窮迴圈,讓此程式
持續的執行
do
inotifywait -r -e create /var/
log/ && /bin/bash script
#設定要監控的目錄名稱,並指定所監控的目
錄發生新增檔案或目錄時便執行Script程式
done
在inotifywait運作一段時間後,可利用inotifywatch程式來統計所監控之目錄內的變動情況,如圖3所示。
|
▲圖3 統計所監控目錄內的變動情況。 |