利用rsync和inotify機制可以實作觸發式的資料備份,也就是實時備份。本地的某個檔案一旦發生變化,就會自動同步到遠端的備份源伺服器上。而不是某個時間段執行備份。
實驗前要解決三點問題:
① 誰是備份源,誰是發起端。(發送連結請求的是發起端,回應請求的是備份源)
② 怎麼察覺本地的檔案發生了變化。(交給inotify機制,Linux核心從2.6.13版本開始提供了inotify通知接口,用來監控檔案系統的各種變化情況,如檔案存取、删除、移動等。利用這一機制,可以非常友善地實作檔案異動告警、增量備份,并針對目錄或檔案的變化及時作出響應。)
③ 怎麼根據目錄或檔案的變化實作發送“備份的請求”進而實作遠端備份的目的。
這裡就要編寫腳本來實作這個功能。
另外,還要解決從監控檔案到遠端備份整個過程中互動式的操作,這裡使用者的互動式認證就要改為秘鑰的驗證方式。
先來看一下我的實驗環境 兩台紅帽6
發起端: 192.168.2.1
備份源: 192.168.2.2
下面是各個主機的操作
發起端:192.168.2.1
1.要監控目錄或檔案的狀态,要利用inotify-tools工具 解壓安裝
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5icYRmcxAjM4kjN3czMx8lMwcTM5YjNvwFOy8CX4AzMxAjMvwFduVWboNWY0RXYvwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
make && make install 執行編譯安裝
2.建立要監測的目錄,也就是要執行備份的目錄 mkdir /abc 随便建立的 并要有其他使用者的讀取權限
3.建立要連結時的ssh 秘鑰 并用備份源(也就是2192.168.2.2)上的使用者拷貝過去
-t 是指定秘鑰的加密類型,執行過程中直接回車,不要設定任何資訊(相當于密保的一個更安全的密碼)
生成的秘鑰在使用者宿主目錄下的 .ssh/下
建立過程
然後用ssh-copy-id 指令把秘鑰複制到備份源上 robin使用者是備份源主機上事先有的
測試用ssh登陸遠端主機是否還用互動式方式驗證
4.編寫腳本一會再說 先到備份源上配置
備份源:192.168.2.2
備份源是提供資料備份時提供的位置(路徑)
我就建立根目錄下的BK目錄了 (根據實際情況而定,真是環境肯定是個安全可靠的位置)
并給與robin 寫入的權限 (robin使用者是實作建立好的)為了目錄的安全,建議更改目錄的屬主和屬組,并設定setfacl 限制
做好後,再回到發起端上配置腳本。
在配置腳本之前先了解一下inotifywait指令的使用。
”-e”用來指定要監控哪些事件(create,move,delete,modify,attrib 是指監聽”建立 移動 删除 寫入 屬性更改” 事件),選項”-m”表示持續監控,”-r”表示遞歸整個目錄,”-q”表示簡化輸出資訊。
其他選項的含義:
-a 存檔模式
-h 儲存硬連接配接
-z 壓縮檔案資料在傳輸
-t 維護修改時間
--delete 删除于多餘檔案
執行後會占用一個終端,表示在檢測/abc 目錄的變化
編寫腳本
第一行不解釋
第二行 定義檢測目錄的變量 直接把監測/abc目錄的指令指派給變量INOTIFY_CMD
第三行 定義執行備份的指令指派給變量RSYNC_CMD
第四行 先執行變量INOTIFY_CMD 并利用grep 把執行變量後的值在賦給變量$AA $BB $CC
第五行 do 循環開始
第六行 利用if判斷語句判斷是否含有*rsync*的程序 如果有 執行第七行的RSYNC_CMD變量并用八九行彈出提示資訊(随意)
第十行if判斷結束
十一行 do結束
執行腳本後 凡是/abc 目錄下發生變化 (建立 移動 删除 寫入 屬性更改)
就會彈出echo 後面的資訊 并向備份源備份 如圖:
192.168.2.2:/BK
給予腳本x執行權限 ,并寫到使用者的登陸的腳本中 這樣使用者一登陸腳本就會執行。