增量備份方式若透過日常排程的方式來進行,可能會發生備份資料不一致的落差,若能改用即時備份的解決方案,在來源端的資料發生異動時,就立即把資料備份至目的端,問題就能夠圓滿解決。這裡使用Linux核心內建的inotify模組以及rsync備份程式來實際示範即時備份的操作。
uid = root #設定rsync執行時所
使用的使用者權限
gid = root #設定rsync執行時所
使用的使用者群組權限
[myrestore] #指定備份代號
path = /restore
#設定備份資料儲存的位置
secrets file = /etc/rsyncd.secrets
#設定來源端連接所使用的帳號及密碼資訊所
在的檔名
read only = false
接著,同樣在目的端上的rsyncd.secrets中加入以下這一行設定:
rsync:rsyncpwd #表示使用者名稱為
rsync,且密碼為rsyncpwd
設定完組態檔後,即可利用「sync --daemon --config=rsyncd.conf」指令來啟動rsync伺服器。可利用「netstat –anpt | grep rsync」指令來檢查是否啟動成功,會發現rsync成功地以通訊埠873運作,如圖5所示。
|
▲圖5 檢查rsync是否已成功啟動。 |
接下來設定來源端,在來源端上新增rsyncd.secrets檔案,在該檔案內加入以下的設定內容:
rsyncpwd #與目的端所設定的密碼要一致
設定完成後,僅需執行下列指令即可將欲被備份的目錄同步至目的端,並儲存在目的端的「/restore」目錄內:
rsync -avzrpog --delete --force
--password-file=rsyncd.secrets
[被備份目錄] rsync@[目的端IP]::
myrestore
接著,利用rsync結合inotifywait來實作,一旦被備份的目錄發生異動時,就會即時地將資料以rsync備份至目的端。為了簡化說明,這裡將只設定當被備份目錄發生新建檔案或目錄時,就執行rsync指令將資料備份至目的端。同樣地承襲上列設定,可另外再撰寫一支簡單的腳本程式(以無限迴圈來執行),程式內容如下所示:
#! /bin/sh
while true
do
inotifywait -r -e create /usr/
bin &&rsync -avzrpog --delete
--force --password-file=rsyncd.
secrets [被備份目錄] rsync@[目的端
IP]::myrestore
done
最後,再以手動的方式執行此腳本程式,至此就完成了即時備份的系統了!
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>