rsync文件同步詳解


此文為轉載

一.  環境和測試說明

rsync(remote sync)是unix及類unix平台下的數據鏡像備份軟件,它不像FTP那樣需要全備份,rsync可以根據數據的變化進行差異備份,從而減少數據流量,提高工作效率

rsync主要分為三個配置文件,分別是rsyncd.conf(主配置文件),rsyncd.secrets(密碼文件),rsyncd.motd(服務器信息文件)

本文件以2台機器為列子進行說明

pc1,IP:192.168.0.230,作為rsync服務器,需要配置rsyncd.conf文件

pc2,IP:192.168.0.234,作為rsync客戶端,不需要配置rsyncd.conf,文件可為空

在服務器端創建/common目錄作為共享目錄,復制一些測試文件到該目錄中,進行測試

yum -y install rsync   #centos默認安裝了

mkdir /common; cp /etc/init.d/* /common/

 

二. 主配置文件說明

vim /etc/rsyncd.conf

motd file = /etc/rsyncd.motd    #設置服務器信息提示文件,在該文件中編寫提示信息

transfer logging = yes    #開啟rsync數據傳輸日志功能

log file = /var/log/rsyncd.log    #設置日志文件名,可通過log format參數設置日志格式

pid file = /var/run/rsyncd.log    #設置rsync進程號保存文件名稱

lock file = /var/run/rsync.lock    #設置鎖文件名稱

port = 873    #設置服務器監聽的端口號,默認是873

address = 192.168.0.230    #設置本服務器所監聽網卡接口的ip地址

uid = nobody    #設置進行數據傳輸時所使用的帳戶名或ID號,默認使用nobody

gid = nobody    #設置進行數據傳輸時所使用的組名或GID號,默認使用nobody

#若為yes, rsync會首先進行chroot設置,將根映射在下面的path參數路徑下,對客戶端而言,系統的根就是path參數指定的路徑。但這樣做需要root權限,並且在同步符號連接資料時只會同步名稱,不會同步內容。

use chroot = no 

read only = yes    #是否允許客戶端上傳數據,yes表示不允許

max connections =10    #設置並發連接數,0表示無限制

[common]    #自定義模塊名,rsync通過模塊定義同步的目錄,可定義多個

comment = web content    #定義注釋說明字串

path = /common    #同步目錄的真是路徑通過path指定

ignore errors    #忽略一些IO錯誤

#exclude = test/    #exclude指定common目錄下某個目錄可以不同步數據

auth users = tom, jerry    #設置允許連接服務器的賬戶,此賬戶可以是系統中不存在的用戶

secrets file = /etc/rsyncd.secrets    #密碼驗證文件名,該文件權限要求為只讀,建議為600,僅在設置auth users后有效

hosts allow = 192.168.0.0/255.255.255.0   #設置哪些主機可以同步數據,多ip和網段之間使用空格分隔

hosts deny=*    #除了hosts allow定義的主機外,拒絕其他所有

list = false    #客戶端請求顯示模塊列表時,本模塊名稱是否顯示,默認為true

 

 

三. 創建密碼文件,防火牆設置,客戶端和服務器端都要做如下操作

echo "tom:123" > /etc/rsyncd.secrets

echo "jerry:123" >> /etc/rsyncd.secrets

chmod 600 /etc/rsyncd.secrets

echo "welcome to access" > /etc/rsyncd.motd  #此項客戶端不需要做

rsync --daemon    # --daemon表示后台執行,客戶端開啟rsync不需要--daemon選項

echo "/usr/bin/rsync --daemon" >> /etc/rc.local    #開機啟動rsync服務

firewall-cmd --permanent --add-port=873/tcp    #添加防火牆規則,允許873端口的數據訪問

 

 

四. 客戶端同步數據

yum -y install rsync

rsync -vzrtopg --progress tom@192.168.0.230::common /test     #通common模塊指定的/common目錄下的文件拷貝到本客戶端的/test目錄下

參數說明

v:顯示詳細信息

z:傳輸過程中對數據進行壓縮

r:遞歸

t:保留修改時間屬性

o:保留文件所有者屬性

p:保留文件權限屬性

g:保留文件所屬組屬性

a:歸檔模式,主要保留文件屬性,等同於-rlptgoD

--progress:顯示數據傳輸的進度信息

--password-file=FILE:指定密碼文件,將密碼寫入文件,實現非交互式數據同步,這個文件名也需要修改權限為600

--delete:刪除那些僅在目標路徑中存在的文件(源路徑中不存在),在腳本中的數據同步經常加上此參數   

--list-only:僅列出服務器模塊列表,需要rsync服務器設置list=true

 

 

五.  rsync語法格式,SRC表示源路徑,DEST表示目標路徑

1. 本地復制

rsync [選項] SRC... [DEST]

2. 通過遠程shell復制

下載數據:rsync [選項] [user@a]HOST:SRC...[DEST]     #不加user@表示用root用戶進行登陸遠程主機下載數據到 本地的DEST路徑

上傳數據:rsync[選項] SRC...[user@]HOST:DEST   #這里的SRC表示本地數據,DEST表示遠端主機目錄

3. 通過rsync進程復制

下載數據

rsync [選項] [user@] HOST::SRC ... [DEST]    #這里雙冒號后的SRC表示遠端服務端的模塊名

rsync [選項] rsync://[user@]HOST[:port]/SRC...[DEST]   #這里的SRC表示實際的同步目錄名,這種方式可以指定端口

上傳數據

rsync [選項] SRC...[user@]HOST::DEST    #上傳本地客戶端數據到遠端服務端的DEST模塊名指定的路徑

rsync [選項] SRC...rsync://[user@HOST[:port]/DEST

 

一些例子

1. rsync -t *.c 192.168.0.54:src/        #將本機當前目錄下的以.c結尾的文件賦值到192.168.0.54的src目錄下

2. rsync -avz 192.168.0.54:src/bar /data/tmp     #從192.168.0.54主機上將src/bar目錄以遞歸方式復制到本機/data/tmp目錄

3. rsync -avz 192.168.0.54:src/bar/ /data/tmp   #和例子2的區別是不在/data/tmp目錄下創建bar目錄

4. rsync -avz /src/foo /dest    #將本機/src/foo目錄復制到/dest目錄

5. rsync -avz tom@192.168.0.230::common /test3    #使用tom賬戶連接遠程192.168.0.230主機的rsync進程,將common模塊定義的path路徑下載到本地test3目錄

6. rsync -avz 192.168.0.230::common /test3     #匿名下載192.168.0.230服務器的common模塊至本地的/test3目錄

7. rsync --list-only tom@192.168.0.254::    #顯示192.168.0.254服務器所有的模塊名稱,需要服務器端配置list=true才會顯示

8. 客戶端每次連接服務器都需要輸入密碼很麻煩,可以創建密碼文件rsync.pass,在其中包含密碼,然后使用--password-file指定此文件

echo "123" > rsync.pass   #服務器端用戶tom的密碼

rsync -avz --delete --password-file=rsync.pass tom@192.168.0.254::common /dest

 

 

六. 編寫簡單shell腳本,使客戶端定期對rsync服務器(192.168.0.230)的數據進行備份

#!/bin/bash

export PATH=/bin:/usr/bin:/usr/local/bin

SRC=common #模塊名

DEST=/data

server=192.168.0.230

user=tom

passfile=/root/rsync.pass

#if the DEST directory not found, then create one

[ ! -d $DEST ] && mkdir $DEST

[ ! -e $passfile ] && exit 2

rsync -az --delete --password-file=$passfile ${user}@${server}::$SRC $DEST/$(data +%Y%m%d)   #加上日期

 

之后在定時任務中加入執行此腳本即可

 

 

七. 附加

ubuntu上做rsync同步可參考   https://www.linuxidc.com/Linux/2016-08/134584.htm

delete參數的例子 參考:https://www.cnblogs.com/wangmo/p/7151175.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM