rsync是linux/unix系統下的檔案同步和資料傳輸工具,它采用“rsync算法”實作主機之間檔案的同步。
rsync的主要特點:
1,rsync可以再中斷傳輸之後恢複傳輸
2,rsync隻傳輸源檔案和目标檔案之間不一緻的部分
3,rsync可以執行完整或增量備份
4,可以使用基于ssh等方式傳輸檔案
5,可以保持原有檔案的所有屬性資訊
rsync的指令格式:
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DES
常用選項:
-v, --verbose 詳細模式輸出
-q, --quiet 精簡輸出模式
-z,在傳輸時對備份檔案進行壓縮處理
-c, --checksum 打開校驗開關,強制對檔案傳輸進行校驗
-a, --archive 歸檔模式,表示以遞歸方式傳輸檔案,并保持所有檔案屬性,等于-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑資訊
-l, --links 保留軟鍊結
-H, --hard-links 保留硬鍊結
-p, --perms 保持檔案權限
-o, --owner 保持檔案屬主資訊
-g, --group 保持檔案屬組資訊
-D, --devices 保持裝置檔案資訊
-t, --times 保持檔案時間資訊
-b, --backup 建立備份,也就是對于目的已經存在有同樣的檔案名時,将老的檔案重新命名為~filename。可以使用--suffix選項來指定不同的備份檔案字首。
--backup-dir 将備份檔案(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份檔案字首
-u, --update 僅僅進行更新,也就是跳過所有已經存在于DST,并且檔案時間晚于要備份的檔案。(不覆寫更新的檔案)
--rsync-path=PATH 指定遠端伺服器上的rsync指令所在路徑資訊
--password-file=FILE 從FILE中得到密碼
--config=FILE 指定其他的配置檔案,不使用預設的rsyncd.conf檔案
--port=PORT 指定其他的rsync服務端口
--progress 在傳輸時顯示傳輸過程
--delete 删除那些DST中SRC沒有的檔案,即保證用戶端和伺服器目錄内容的完全一緻
--existing 僅僅更新那些已經存在于DST的檔案,而不備份那些新建立的檔案
--exclude 指定不需要傳輸的檔案類型
rsync的四種工作模式:
一,本地shell應用模式
主要用于複制本地指定檔案到本地另一個目錄中
例1:複制指定的檔案,到一個目錄中
# rsync -av *.sh /tmp/
例2:複制整個目錄及其中的檔案到一個目錄中
# rsync -av haha test/
例3:複制目錄中的整個檔案到另一個目錄中(隻有檔案,沒有haha目錄)
# rsync -av haha/ test
注:目标參數末尾的斜杠沒有任何作用
二,遠端shell模式
主要用于把指定的本地目錄複制到另一個系統中或是将一個系統中的檔案複制到本地
例1:把本地目錄複制到遠端主機的/root/test目錄中
# rsync -av haha [email protected]:/root
或
# rsync -av haha 172.16.30.5:test(如果使用的root使用者的話,會自動在/root中建立一個test目錄,并把haha目錄及其目錄中的内容複制其中)
例2:把遠端主機上的目錄複制到本地目錄/中
# rsync -av [email protected]:/root/haha /
三,rsync清單模式
主要用于顯示本地或是遠端系統中的目錄清單,并且遞歸顯示
例1:顯示本地系統的目錄清單
# rsync -a haha/
drwxr-xr-x 4096 2012/06/24 14:27:31 .
drwxr-xr-x 4096 2012/06/24 14:28:20 lee
-rw-r--r-- 0 2012/06/24 14:28:20 lee/lishengjia
例2:顯示遠端系統的目錄清單
# rsync -a [email protected]:test(顯示/root/test目錄清單)
[email protected]'s password:
drwxr-xr-x 4096 2012/05/09 03:23:32 test
drwxr-xr-x 4096 2012/06/24 14:27:31 test/haha
-rw-r--r-- 0 2012/06/24 14:25:05 test/haha/haha.txt
drwxr-xr-x 4096 2012/06/24 14:28:20 test/haha/lee
-rw-r--r-- 0 2012/06/24 14:28:20 test/haha/lee/lishengjia
四,伺服器模式
此模式基于C/S模式,在rsync伺服器端運作一個守護程序,用于接受檔案傳輸請求,而rsync用戶端可以把檔案發送給守護程序,也可以向守護程序請求檔案。主要用于遠端檔案同步和資料備份。
案例:170.16.30.4作為web伺服器,它的通路日志每天都要定時備份到172.16.30.5這台專門存放伺服器通路 日志的主機上。
我們可以通過,把172.16.30.4作為rsync伺服器端,172.16.30.5作為rsync用戶端,然後通過crontab定時備份日志即可。
配置如下;
172.16.30.4上的配置:
1,安裝rsync軟體包
# yum -y install rsync
2,手動建立rsync的配額檔案
# vim /etc/rsyncd.conf
#uid,gid指定以哪個使用者身份運作rsync傳輸檔案的守護程序
uid = nobody
gid = nobody
#如果指定為true,那麼rsync在傳輸檔案以前首先chroot到path參數所指定的目錄下,這樣做的原因是實作額外的安全防護,但是缺點是需要root權限,并且不能備份指向外部的符号連接配接所指向的目錄檔案。一般使用no即可
use chroot = no
#指定并發連接配接伺服器的個數
max connections = 10
#是否檢查密碼檔案的權限,如果為yes,則密碼檔案必須為root所有
strict modes = yes
#以下指定pid,鎖,日志檔案的路徑
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#定義一個子產品,可以有多個,web是對應子產品的名稱
[web]
# 指定要備份的檔案或者目錄
path = /var/log/httpd
#描述資訊
comment = web server log
#忽略無關的I/O錯誤
ignore errors
#設為no表示,用戶端可以往伺服器上上傳檔案;yes的話,不能上傳
read only = no
#設為no表示用戶端可下載下傳檔案;設為yes表示不能下載下傳檔案
write only = no
#設定允許連接配接rsync伺服器的主機,*表示所有,也可以是網段
hosts allow = *
#設定禁止連接配接rsync伺服器的主機
hosts deny = 172.16.30.1
#用于設定檔客戶請求可以使用的子產品清單時,該子產品是否被列出。true列出,false隐藏
list = false
#該選項指定當該子產品傳輸檔案時守護程序應該具有的uid和gid,預設值為全局定義的"nobody"
uid = root
gid = root
#定義可以連接配接該子產品的使用者名,和系統使用者無關,多個使用者名用空格或者,好隔開
auth users = jia
#指定一個“使用者名:密碼”格式的檔案,使用者名就是auth users指定的,密碼要和用戶端的密碼檔案對用起來
secrets file = /etc/server.pass
建立賬戶檔案:
# vim /etc/server.pass
jia:leejia(第一個為使用者名,第二個為對應的密碼)
改變檔案的權限:
# chmod 600 /etc/server.pass
3,開啟rsync守護程序
# /usr/bin/rsync --daemon
檢視:
# ps -ef |grep rsync
root 14879 1 0 00:14 ? 00:00:00 /usr/bin/rsync --daemon
root 14881 12749 0 00:14 pts/0 00:00:00 grep rsync
172.16.30.5上的配置:
安裝rsync軟體包
建立一個密碼檔案,這用用rsync指令同步的時候,可以指定這個密碼檔案,不用手動輸入密碼:
leejia
更改權限:
測試檔案是否能同步:
# /usr/bin/rsync -vzrtopg --delete --progress [email protected]::web /tmp --password-file=/etc/server.pass
注:/tmp是用戶端存放備份檔案的目錄
4,在172.16.30.5上建立計劃任務,定時備份日志
# crontab -e
添加如下内容,在每天的3點40分進行備份
40 3 * * * /usr/bin/rsync -vzrtopg --delete --progress [email protected]::web /tmp --password-file=/etc/server.pass
本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/924121,如需轉載請自行聯系原作者