Rsync on debian
Rsync 在網路上有不少教學文件,但它在不同的作業系統上或者是不同的 linux 版本上的設定,多少都有一些差異,所以你若在不同的系統環境下你要完全照著教學作,經常會設定不起來,因此就要理解其原理,比照相對的位置去設定才行。尤其是 debian 的設定方法經常都跟 redhat、fedora系列的不一樣,而台灣用 debian 的人又少,因此設定上若沒找到教學文件的話,自己設起來是挺困難的。
底下介紹的是 Rsync 安裝在 debian 5.0 lenny 的教學,透過遠端網路和加密碼認証備份,從而實現異地備援的效果。 ubuntu 系統也適用此設定 (應該是吧,我猜的)
(1).安裝 rsync (兩端都需設定)
apt-get install rsync
(2).設定 rsync 常駐 (僅server端需設定)
vim /etc/default/rsync
將 RSYNC_ENABLE=false
改 RSYNC_ENABLE=true
要改其它 port 的話,同樣在此檔,找到 RSYNC_OPTS=’ ‘ 改寫如下
RSYNC_OPTS=’–port=8730′
(3).設定 rsync server 設定檔 (僅server端需設定)
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf
vim /etc/rsyncd.conf
————————- /etc/rsyncd.conf 設定範例1 ————————————
# MODULE OPTIONS
[system]
#↑此為模組名稱,最好不要打中文,容易出錯,模組名稱是用來備份時的代號
comment = 整個系統備份
#↑ 這行只是文字說明而已
path = /
#↑設定此模組 system 的路徑
use chroot = no
#↑變更啟始路徑
max connections=2
#↑最大連線數
lock file = /var/lock/rsyncd
read only = yes
#↑唯讀
list = yes
uid = root
gid = root
# 設定執行rsync時的身份為何
# exclude =
#↑設定排除檔案和目錄
# exclude from =
#↑設定排除檔案和目錄的清單從某個檔案讀進來
# include =
# include from =
auth users = user1
#↑設定可連進來的使用者帳號,此 user1 的帳密必須寫在底下 rsyncd.secrets 這個檔(若沒有auth users此項則 anonymous可登入)
secrets file = /etc/rsyncd.secrets
#↑帳密檔設定,此檔必須設為 chmod 600, root 專有的屬性,否則會報錯
strict modes = yes
# hosts allow =
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
#不要對有以上列出附檔名之檔案做壓縮。
————————- /etc/rsyncd.conf 設定範例1 ————————————
————————- /etc/rsyncd.conf 設定範例2 ————————————
# GLOBAL OPTIONS 全域設定
pid file=/var/run/rsyncd.pid
use chroot = no
max connections=2
lock file = /var/lock/rsyncd
read only = yes
list = yes
uid = root
gid = root
auth users = user1
secrets file = /etc/rsyncd.secrets
strict modes = yes
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
# MODULE OPTIONS 模組設定
[MCxxxx]
comment = mysql備份
path = /var/lib/mysql/MCxxxx
[MGxxxx]
path = /var/lib/mysql/MGxxxx
[html]
comment = 公用程式
path = /var/www/html
[inc]
comment = 公用程式
path = /var/www/includes
[suitetpe]
comment = 客戶1
path = /var/www/customers/webs/suitetpe
[tecofound]
comment = 客戶2
path = /var/www/customers/webs/tecofound
————————- /etc/rsyncd.conf 設定範例2 ————————————
每次改完以上設定檔,需重啟 rsync 才能載入新的設定值,重啟指令
/etc/init.d/rsync restart
(4).設定密碼檔 (兩端都需設定)
echo “user1:password” > /etc/rsyncd.secrets
echo “password” > /etc/rsyncd.pw
chmod 600 /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.pw
chown root:root /etc/rsyncd.secrets
chown root:root /etc/rsyncd.pw
說明:rsyncd.secrets 此檔內容的格式為 帳號:密碼
rsyncd.pw 此檔內容只存密碼
(5).設定備份指令 (僅 client 端需設定)
將以下內容寫成一個 script 檔,放入 crontab 去定時執行
———————-備份指令設定範例1——————————————————————————-
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete –exclude=/proc/* –exclude=/sys/* –exclude=/tmp/* –exclude=/mnt/* –exclude=/etc/proftpd/proftpd.conf –exclude=/etc/udev/rules.d/70-persistent-net.rules –exclude=/etc/network/interfaces –exclude=/etc/hosts –exclude=/etc/hostname –exclude=/root/iptables.sh –exclude=/selinux/* –exclude=/dev/* –exclude=/etc/cron.d/remotebakuser1@192.168.0.33::system /
———————-備份指令設定範例1——————————————————————————-
———————-備份指令設定範例2——————————————————————————-
#mysql 的2個資料庫備份
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MCxxxx/var/lib/mysql/MCxxxx
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MGxxxx/var/lib/mysql/MGxxxx
#公用程式同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::html/var/www/html
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::inc/var/www/includes
#客戶網站目錄同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::tecofound/var/www/customers/webs/tecofound
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::suitetpe/var/www/customers/webs/suitetpe
———————-備份指令設定範例2——————————————————————————-
簡要說明:
rsync 參數 –指定密碼檔 –delete(刪除) –exclude=排除檔案或目錄 來源(語法為:帳號@IP或域名::模組名稱) 目地
詳細參數說明:
-a, –archive 權限保存模式
-H, –hard-links 保留硬式連結
-D, –devices 保留device資訊(root only)
-S, –sparse 嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.
-t, –times 保留時間點
-v , –verbose 複雜的輸出訊息,若要在背景執行請拿掉此參數
–password-file=/etc/rsyncd.pw –delete 指定密碼檔
–delete 刪除server端已經不存在,而client端存在的檔案
rsync 例外檔 (不要同步備份的檔案或目錄)
這裡要說明的是,設定範例1的部份,因為我是幾乎整個系統的備份,而我的系統上面又有啟動selinux,所以要排除的檔案有很多,這部份可以你自己的需求去慢慢測試排除的檔案 (設定範例2,就沒有那麼麻煩,只針對幾個目錄的備份,故沒有那麼多要排除的檔案)
–exclude=/etc/proftpd/proftpd.conf
#↑因為裡面有不同的 hostname 對應
–exclude=/etc/udev/rules.d/70-persistent-net.rules
#↑因不同的網卡 mac address 對應
–exclude=/etc/network/interfaces
#↑因不同的IP設定
–exclude=/root/iptables.sh
#↑因在 iptables.sh 內有關閉 eth0 指令
–exclude=/etc/hosts
#↑因不同的 localhost 對應
–exclude=/etc/hostname
#↑因為不同的 hostname 設定
–exclude=/selinux/*
–exclude=/dev/*
#↑因權限問題而無法備份
–exclude=/etc/cron.d/remotebak
#↑因為只要vh2去同步vh1即可,故 vh1 上不需要有此檔
rsync設定檔詳解
對於rsync服務器來說,最重要和複雜的就是它的配置了。rsync服務器的配置文件為/etc/rsyncd.conf,其控制認證、訪問、日誌記錄等等。
該文件是由一個或多個模組結構組成。一個模組定義以方括弧中的模組名開始,直到下一個模組定義開始或者文件結束,模組中包含格式為name = value的參數定義。每個模組其實就對應需要備份的一個目錄樹,比方說在我們的實例環境中,有三個目錄樹需要備份:/www/、 /home/web_user1/和/home/web_user2/,那麼就需要在配置文件中定義三個模組,分別對應三個目錄樹。
配置文件是行為單位的,也就是每個新行都表示一個新的註釋、模組定義或者參數賦值。以#開始的行表示註釋,以””結束的行表示下面一行是該行的繼續。參數賦值中等號後可能是一個大小寫不敏感的字符串、一個以trure/false表示的布爾值。
全局參數
在文件中[modlue]之前的所有參數都是全局參數,當然也可以在全局參數部分定義模組參數,這時候該參數的值就是所有模組的預設值。
motd file
“motd file”參數用來指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶,預設是沒有motd文件的。
log file
“log file”指定rsync的日誌文件,而不將日誌發送給syslog。
pid file
指定rsync的pid文件。
syslog facility
指定rsync發送日誌消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。預設值是daemon。
模組參數
在全局參數之後就需要定義一個或多個模組了,模組中可以定義以下參數:
comment
給模組指定一個描述,該描述連同模組名在客戶連接得到模組列表時顯示給客戶。預設沒有描述定義。
path
指定該模組的供備份的目錄樹路徑,該參數是必須指定的。
use chroot
如果”use chroot”指定為true,那麼rsync在傳輸文件以前首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要以roots權限,並且不能備份指向外部的符號連接所指向的目錄文件。預設情況下chroot值為true。
max connections
指定該模組的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。預設值是0,也就是沒有限制。
lock file
指定支持max connections參數的鎖文件,預設值是/var/run/rsyncd.lock。
read only
該選項設定是否允許客戶上載文件。如果為true那麼任何上載請求都會失敗,如果為false並且服務器目錄讀寫權限允許那麼上載是允許的。預設值為true。
list
該選項設定當客戶請求可以使用的模組列表時,該模組是否應該被列出。如果設置該選項為false,可以創建隱藏的模組。預設值是true。
uid
該選項指定當該模組傳輸文件時守護進程應該具有的uid,配合gid選項使用可以確定哪些可以訪問怎麼樣的文件權限,預設值是”nobody”。
gid
該選項指定當該模組傳輸文件時守護進程應該具有的gid。預設值為”nobody”。
exlude
用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用–exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模組只能指定一個exlude選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。
但是需要註意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude列表,如果希望確保特定的文件不能被訪問,那就最好結合uid/gid選項一起使用。
exlude from
指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exlude列表定義。
include
用來指定多個由空格隔開的多個rsync並應該exlude的模式列表。這等同於在客戶端命令中使用–include來指定模式,結合 include和exlude可以定義複雜的exlude/include規則。一個模組只能指定一個include選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。
include from
指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。
auth users
該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模組。這裡的用戶和系統用戶沒有任何關係。如果”auth users”被設置,那麼客戶端發出對該模組的連接請求以後會被rsync請求challenged進行驗證身份這裡使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在”secrets file”選項指定的文件中。預設情況下無需密碼就可以連接模組(也就是匿名方式)。
secrets file
該選項指定一個包含定義用戶名:密碼對的文件。只有在”auth users”被定義時,該文件才有作用。文件每行包含一個username:passwd對。一般來說密碼最好不要超過8個字符。沒有預設的 secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)
strict modes
該選項指定是否監測密碼文件的權限,如果該選項值為true那麼密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。預設值為true。
hosts allow
該選項指定哪些IP的客戶允許連接該模組。客戶模式定義可以是以下形式:
o xxx.xxx.xxx.xxx,客戶主機只有完全匹配該IP才允許訪問。例如:192.167.0.1
o a.b.c.d/n,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/24
o a.b.c.d/e.f.g.h,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/255.255.255.0
o 一個主機名,客戶主機只有擁有該主機名才允許訪問,例如:backup.linuxaid.com.cn。
o *.linuxaid.com.cn,所有屬於該域的主機都允許。
預設是允許所有主機連接。
hosts deny
指定不允許連接rsync服務器的機器,可以使用hosts allow的定義方式來進行定義。預設是沒有hosts deny定義。
ignore errors
指定rsyncd在判斷是否運行傳輸時的刪除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時將將跳過–delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題。
ignore nonreadable
指定rysnc服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些文件是不應該被備份者得到的情況是有意義的。
transfer logging
使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日誌中。
log format
通過該選項用戶在使用transfer logging可以自己定制日誌文件的字段。其格式是一個包含格式定義符的字符串,可以使用的格式定義符如下所示:
o %h 遠程主機名
o %a 遠程IP地址
o %l 文件長度字符數
o %p 該次rsync會話的進程id
o %o 操作類型:”send”或”recv”
o %f 文件名
o %P 模組路徑
o %m 模組名
o %t 當前時間
o %u 認證的用戶名(匿名時是null)
o %b 實際傳輸的字節數
o %c 當發送文件時,該字段記錄該文件的校驗碼
預設log格式為:”%o %h [%a] %m (%u) %f %l”,一般來說,在每行的頭上會添加”%t [%p] “。在源代碼中同時發佈有一個叫rsyncstats的perl腳本程序來統計這種格式的日誌文件。
timeout
通過該選項可以覆蓋客戶指定的IP超時時間。通過該選項可以確保rsync服務器不會永遠等待一個崩潰的客戶。超時單位為秒鐘,0表示沒有超時定義,這也是預設值。對於匿名rsync服務器來說,一個理想的數字是600。
refuse options
通過該選項可以定義一些不允許客戶對該模組使用的命令參數列表。這裡必須使用命令全名,而不能是簡稱。但發生拒絕某個命令的情況時服務器將報告錯誤信息然後退出。如果要防止使用壓縮,應該是:”dont compress = *”。
dont compress
用來指定那些不進行壓縮處理再傳輸的文件,預設值是
*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz