rsync語法:html
Local: rsync [OPTION...] SRC... [DEST] #<===本地傳輸數據 Access via remote shell: #<===藉助通道傳輸數據,本地-遠程主機;遠程主機-本地 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] #<===從遠程主機拉取數據到本地 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST #<===從本地推數據到遠程主機 Access via rsync daemon: #<===經過守護進程(socket網絡套接字)傳輸數據---重點 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] #<===注意daemon模式下傳輸數據,使用的是自定義的模塊的名稱 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
本地傳輸模式和藉助通道傳輸模式使用實例linux
[root@meinv01 ~]# rsync /etc/hosts /tmp/ #<==本地到本地
[root@meinv01 ~]# ls /tmp/
hosts
ssh-NFCFOdb882
[root@meinv01 ~]# rsync -avz /etc/hosts -e 'ssh -p 22' root@192.168.81.169:~ #<==藉助ssh通道,拷貝本地文件到遠程主機,若是是遠程拉取數據到本地,調換一下位置便可
root@192.168.81.169's password:
sending incremental file list
sent 30 bytes received 12 bytes 12.00 bytes/sec
total size is 158 speedup is 3.76
[root@meinv02 ~]# ll
total 44
-rw-------. 1 root root 1116 Aug 1 12:58 anaconda-ks.cfg
-rw-r--r-- 1 root root 158 Aug 1 12:35 hosts
注意點:源路徑若是是一個目錄的話,帶上尾隨斜線和不帶尾隨斜線是不同的,不帶尾隨斜線表示的是整個目錄包括目錄自己,帶上尾隨斜線表示的是目錄中的文件,不包括目錄自己shell
如:服務器
[root@xuexi ~]# rsync -a /etc /tmp #<==表示把etc這個目錄及其目錄下的文件和目錄拷貝到tmp下 [root@xuexi ~]# rsync -a /etc/ /tmp #<==只把etc下的文件及目錄拷貝到tmp
rsync的經常使用參數說明:(-avzP至關於-vzrtopgDlP,腳本內用az便可)網絡
-v --verbose 輸出傳輸時的進度信息 -z --compress 傳輸時進行壓縮傳輸以提升效率 --compress-level=NUM可按級別壓縮 -a --archive 歸檔模式,遞歸方式傳輸並保持全部文件屬性,等價於--rtopgDl -r --recursive 對子目錄以遞歸模式傳輸,小寫r參數 -t --times 保持文件時間信息 -o --owner 保持文件屬主信息 -p --perms 保持文件權限信息 -g --group 保持文件屬組信息 -P --progress 顯示同步的過程及傳輸的進度等信息 -D --devices 保持文件設備信息 -l --links 保持軟連接信息 -e --rsh=command 指定使用的信道協議,指定替換的rsh的shell程序,如ssh --exclude=pattern 指定排除不須要的傳輸的文件模式 --exclude-from=file 排除指定文件內容中的文件 --bwlimit=RATE 傳輸時進行限速(整數) --delete 同步參數(慎用
rsync經過守護進程socket傳輸數據圖解:ssh
rsync服務端配置:socket
[root@C-linux ~]# uname -r #<==查看版本號 2.6.32-431.el6.x86_64 [root@C-linux ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@C-linux ~]# /etc/init.d/iptables status #<==中止防火牆 iptables: Firewall is not running. [root@C-linux ~]# getenforce #<==關閉selinux Disabled [root@C-linux ~]# rpm -qa|grep rsync #<==服務端和客戶端和要保證rsync軟件包已安裝 rsync-3.0.6-9.el6_4.1.x86_64 [root@C-linux ~]# rsync --version #<==查看rsync版本號 rsync version 3.0.6 protocol version 30 [root@C-linux ~]# rz -y rz waiting to receive. ???a? zmodem ′???£ °′ Ctrl+C ???£ ??′?? rsyncd.conf... 100% 562 bytes 562 bytes/s 00:00:01 0 ′? ?[root@C-linux ~]# ls rsyncd.conf [root@C-linux ~]# cp rsyncd.conf /etc/ [root@C-linux ~]# useradd -M -s /sbin/nologin rsync #<==添加指定用戶做爲傳輸時使用的用戶 [root@C-linux ~]# id rsync uid=502(rsync) gid=502(rsync) 組=502(rsync) [root@C-linux ~]# vi /etc/rsyncd.conf [root@C-linux ~]# cat /etc/rsyncd.conf #<==rsync服務端配置文件具體配置 #rsync_configuration #port=873 # 指定rsync端口。默認873(沒有特殊需求,使用默認端口便可) uid = rsync # rsync服務的運行用戶,默認是nobody,文件傳輸成功後屬主將是這個uid gid = rsync # rsync服務的運行組,默認是nobody,文件傳輸成功後屬組將是這個gid use chroot = no # rsync daemon在傳輸前是否切換到指定的path目錄下,並將其監禁在內 max connections = 200 # 指定最大鏈接數量,0表示沒有限制 timeout = 300 # 連接超時時間,確保rsync服務器不會永遠等待一個崩潰的客戶端,0表示永遠等待 pid file = /var/run/rsyncd.pid # 指定rsync daemon的pid文件 lock file = /var/run/rsync.lock # 指定鎖文件 log file = /var/log/rsyncd.log # 指定rsync的日誌文件存放,而不把日誌發送給syslog
[data] # 模塊ID ,傳輸數據時指定模塊ID,就會將數據傳輸到模塊指定對應的目錄下 path = /data/ # 指定該模塊的路徑,該參數必須指定。啓動rsync服務前該目錄必須存在。rsync請求訪問模塊本質就是訪問該路徑 ignore errors # 忽略某些IO錯誤信息 read only = false # 指定該模塊是否可讀寫,即可否上傳文件,false表示可讀寫,true表示可讀不可寫。全部模塊默認不可上傳 #write only = false # 指定該模式是否支持下載,設置爲true表示客戶端不能下載。全部模塊默承認下載 list = false # 客戶端請求顯示模塊列表時,該模塊是否顯示出來,設置爲false則該模塊爲隱藏模塊。默認true hosts allow = 10.0.0.0/24 # 指定容許鏈接到該模塊的機器,多個ip用空格隔開或者設置區間 hosts deny = 0.0.0.0/32 # 指定不容許鏈接到該模塊的機器 auth users = rsync_backup # 指定鏈接到該模塊的用戶列表,只有列表裏的用戶才能鏈接到模塊,用戶名和對應密碼保存在secrts file中, # 這裏使用的不是系統用戶,而是虛擬用戶。不設置時,默認全部用戶都能鏈接,但使用的是匿名鏈接 secrets file = /etc/rsync.password # 保存auth users用戶列表的用戶名和密碼,每行包含一個username:passwd。因爲"strict modes", # 默認爲true,因此此文件要求非rsync daemon用戶不可讀寫。只有啓用了auth users該選項纔有效 #rsync_config_______________end #[test] # 如下定義的是第二個模塊(根據狀況加載便可) :wq #<==保存退出
[root@C-linux ~]# mkdir /data #<==建立rsync模塊所存放的目錄 [root@C-linux ~]# chown -R rsync.rsync /data #<==受權 [root@C-linux ~]# echo 'rsync_backup:123456' >/etc/rsync.password #<==指定密碼文件 [root@C-linux ~]# cat /etc/rsync.password rsync_backup:123456 [root@C-linux ~]# chmod 600 /etc/rsync.password #<==此文件權限需爲600,不然出錯 [root@C-linux ~]# ll /etc/rsync.password -rw------- 1 root root 20 1月 31 13:16 /etc/rsync.password
[root@C-linux ~]# rsync --daemon #<==啓動rsync服務 [root@C-linux ~]# netstat -lntup|grep rsync #查看服務是否起來 [root@C-linux ~]# echo 'rsync --daemon' >>/etc/rc.local
以上是服務端(rsync --damon)的配置,下面測試
配置客戶端ui
[root@A-linux ~]# /etc/init.d/iptables stop [root@A-linux ~]# getenforce Disabled
[root@A-linux ~]# rpm -qa|grep rsync [root@A-linux ~]# echo '123456' >/etc/rsync.password [root@A-linux ~]# cat /etc/rsync.password #<===客戶端密碼文件只須要保留密碼便可,無需將用戶一塊兒保留 123456 [root@A-linux ~]# chmod 600 /etc/rsync.password [root@A-linux ~]# ll /etc/rsync.password -rw------- 1 root root 7 1月 31 13:28 /etc/rsync.password
配置完成後,須要注意2個地方:spa
1. 數據的流向是從客戶端到服務端,在客戶端進行拉/推操做數據流向
2. 全部操做(備份)都是在客戶端,服務端只是守護進程
3. 配置好rsync --daemon服務端後,在客戶端推拉數據的時候,就不用借用通道了,直接是使用服務端偵聽的端口傳輸數據
測試驗證:
客戶端推數據到服務端
[root@A-linux ~]# rsync -avz /tmp/ rsync_backup@10.0.0.4::data --password-file=/etc/rsync.password sending incremental file list ./ hosts .ICE-unix/ ssh-hBbdsD1500/ ssh-hBbdsD1500/agent.1500 sent 253 bytes received 41 bytes 588.00 bytes/sec total size is 166 speedup is 0.56
服務端查看數據
[root@C-linux ~]# ll /data/ 總用量 8 -rw-r--r-- 1 rsync rsync 166 1月 31 10:36 hosts drwx------ 2 rsync rsync 4096 1月 31 13:27 ssh-hBbdsD1500
若是出現報錯信息,查看日誌排錯便可! 更多rsync知識及原理深刻了解,請查看好友博客