part 1:基本環境
OS: ubutnu 10.10
server: 172.16.2.84
client: 172.16.2.142
part 2: server 端相關操作
1 install:
ubuntu 從 10.04 開始就默認安裝 rsync。 rsync 服務時默認不啓動的,如果想要開啓啓動,可以修改:
$sudo vim /etc/default/rsync
RSYNC_ENABLE=true #false改true
2 修改配置文件:
# 對於大多數默認安裝的,默認開啓不啓動的文件都會保存在 /usr/share 中。 如果讓其開啓啓動,可以拷貝到 /etc 目錄下$sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
我們先來查看一下這個文件(知道爲什一定要使用cat 嗎? cat 是以只讀文件形式打開)
$sudo cat /etc/rsyncd.conf
# 文件顯示如下:
# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd # 顯示登錄之後的歡迎信息,如果願意,可以自己修改 /etc/motd 目錄下的東西
#log file=/var/log/rsyncd #指定日誌文件的存放路徑。此時日誌就默認保存在rsyncd 文件中
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
# pid file=/var/run/rsyncd.pid
# 指定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。 (應該明白,系統有一個自己的日誌系統, syslog)
#syslog facility=daemon
# 自定義tcp選項,默認是關閉的
#socket options=
# 以下是模塊信息, 我們可以創建多個模塊
# MODULE OPTIONS
[ftp]
comment = public archive # 模塊描述
path = /var/www/pub # 在rsync 服務器上,指定需要同步的路徑
use chroot = yes #默認是yes|true,如果爲true,那麼在rsync在傳輸文件以前首先chroot到path參數指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要root權限,並且不能備份指向外部的符號連接指向的目錄文件。
# max connections=10 # 最大的連接數
lock file = /var/lock/rsyncd # 指定支持 max connections 參數時的鎖文件
# the default for read only is yes...
read only = yes # 只讀選項
list = yes #客戶請求時可用模塊時是否列出該模塊
uid = nobody #設定該模塊傳輸文件時守護進程應該具有的uid
gid = nogroup #設定該模塊傳輸文件時守護進程應具有的gid,此項與uid配合可以確定文件的訪問權限
# exclude = #用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用--exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模塊只能指定一個exlude選項,但是可以在模式前面使用"-"和"+"來指定是exclude還是include #這個我的理解是排除目錄中不需同步的文件,是的
# exclude from = #可以指定一個包含exclude模式定義的文件名,(不是太理解)
# include = #與exclude相似
# include from = #可以指定一個包含include模式定義的文件名
# auth users = #該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裏的用戶和系統用戶沒有任何關係。如果"auth users"被設置,那麼客戶端發出對該模塊的連接請求以後會被rsync請求challenged進行驗證身份這裏使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認情況下無需密碼就可以連接模塊(也就是匿名方式) 默認情況下是不需要用戶名和密碼的
# secrets file = /etc/rsyncd.secrets #該文件每行包含一個username:password對,以明文方式存儲,只有在auth users被定義時,此選項才生效。同時我們需要將此文件權限設置爲0600
strict modes = yes #該選項指定是否監測密碼文件的權限,如果該選項值爲true那麼密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認值爲yes
# hosts allow = #允許的主機. 如果不寫, 表示任何主機都可以訪問
# hosts deny = #拒絕訪問的主機.
ignore errors = no #設定rsync服務器在運行delete操作時是否忽略I/O錯誤
ignore nonreadable = yes #設定rysnc服務器忽略那些沒有訪問文件權限的用戶
transfer logging = no #使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日誌中
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #設定日誌格式
timeout = 600 # 設置超時時間
refuse options = checksum dry-run #定義一些不允許客戶對該模塊使用的命令選項列表, 即這個命令不可用
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告訴rysnc哪些文件在傳輸前不用壓縮,默認已設定壓縮包不再進行壓縮
日誌格式選項列表:
%h:遠程主機名
%a:遠程IP地址
%l:文件長度字符數
%p:該次rsync會話的進程id
%o:操作類型:"send"或"recv"、”del.”
%f:文件名
%P:模塊路徑
%m:模塊名
%t:當前時間
%u:認證的用戶名(匿名時是null)
%b:實際傳輸的字節數
%c:當發送文件時,該字段記錄該文件的校驗碼
下面我們自己來定義自己的conf 文件: (一般來說,系統默認給出的配置文件都比較全,在具體的項目實踐中,一般是越簡單越好,把一些不需要的的東西去掉)
log file=/var/log/rsyncd
pid file=/var/run/rsyncd.pid
syslog facility=daemon
comment = public archive
path = /home/rsync_bk
use chroot = no
lock file = /var/lock/rsyncd
read only = yes
list = yes
uid = nobody
gid = nogroup
auth users = rsync
secrets file = /etc/rsyncd.secrets
strict modes = yes
hosts allow = 172.16.2.142
ignore errors = yes
ignore nonreadable = yes
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
創建一個密碼文件,並寫入username:password:
$sudo vi /etc/rsyncd.secrets
rsync:123
修改權限: 600 分別表示user, group, others 的rwz權限, 首位的 0 好像是特權位,
$sudo chmod 0600 /etc/rsyncd.secrets
啓動rsync
sudo /etc/init.d/rsync start
# client 同步之後一個, 從 /var/log/rsyncd 截取的一個日誌片斷:
2011/08/31 11:38:52 [11083] sent 200 bytes received 82 bytes total size 252011/08/31 11:39:27 [11556] name lookup failed for 172.16.2.142: Name or service not known
2011/08/31 11:39:27 [11556] connect from UNKNOWN (172.16.2.142)
2011/08/31 11:39:31 [11556] auth failed on module rsync_bk from unknown (172.16.2.142): password mismatch
2011/08/31 11:39:47 [11799] name lookup failed for 172.16.2.142: Name or service not known
2011/08/31 11:39:47 [11799] connect from UNKNOWN (172.16.2.142)
2011/08/31 11:39:50 [11799] rsync on rsync_bk/ from rsync@unknown (172.16.2.142)
2011/08/31 11:39:50 [11799] building file list
part 3: clinet 端相關操作:
一般客戶端不需要進行特殊的配置,直接同步即可
在服務器上建立 a.py, b,py c.py , 在client 端執行 "rsync -vzrtopg --progress [email protected]::rsync_bk . "就可以同步到 當前目錄,當然也可以建立一個目錄, rsync
jia@jia:~$ rsync -vzrtopg --progress [email protected]::rsync_bk rsync
Password:
receiving incremental file list
./
a.py
25 100% 24.41kB/s 0:00:00 (xfer#1, to-check=2/4)
b.py
6 100% 5.86kB/s 0:00:00 (xfer#2, to-check=1/4)
c.py
4 100% 0.11kB/s 0:00:00 (xfer#3, to-check=0/4)
sent 119 bytes received 312 bytes 172.40 bytes/sec
total size is 35 speedup is 0.08
我們把這個同步工作交給crontab去執行。首先我們要創建一個密碼文件
$sudo vi /etc/rsync.pwd輸入123,保存 #這裏指定使用的密碼文件中只需要有密碼,不要有用戶名。並且密碼要一致,
!注意:下面這兩步操作是必須的,沒有足夠權限同步就會不成功,ls -l 你所指向的目錄 可以查看.pwd 文件的屬性和屬主
sudo chmod 0600 /etc/rsync.pwd
sudo chown 普通用戶:普通用戶組 /etc/rsync.pwd
然後我們打開crontab,使它自動同步
$crontab -e
* * * * * rsync -a --password-file=/etc/rsync.pwd [email protected]::rsync_bk /databk
首次執行crontab 的一個界面: (首行的5個* 是固定時間格式)
jia@jia:~/rsync$ crontab -e
no crontab for jia - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
crontab隨機啓動 , 即電腦一啓動就開啓crontab;