rsync文件同步詳解

 

一.  環境和測試說明linux

rsync(remote sync)是unix及類unix平臺下的數據鏡像備份軟件,它不像FTP那樣須要全備份,rsync能夠根據數據的變化進行差別備份,從而減小數據流量,提升工做效率web

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

本文件以2臺機器爲列子進行說明ubuntu

pc1,IP:192.168.0.230,做爲rsync服務器,須要配置rsyncd.conf文件vim

pc2,IP:192.168.0.234,做爲rsync客戶端,不須要配置rsyncd.conf,文件可爲空centos

在服務器端建立/common目錄做爲共享目錄,複製一些測試文件到該目錄中,進行測試bash

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

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

 

二. 主配置文件說明tcp

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/rysncd.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

相關文章
相關標籤/搜索