一、Rsync是什么?
Rsync (remote rsync) 是可以實現(xiàn)增量備份的遠(yuǎn)程(和本地)文件復(fù)制工具尼桶,目的是實現(xiàn)本地主機(jī)和遠(yuǎn)程主機(jī)上的文件同步(包括本地推到遠(yuǎn)程趾盐,遠(yuǎn)程拉到本地兩種同步方式)久窟,也可以實現(xiàn)本地不同路徑下(不同目錄斥扛、分區(qū)之間)文件的同步犹赖,但不能實現(xiàn)遠(yuǎn)程路徑1到遠(yuǎn)程路徑2之間的同步(scp可以實現(xiàn))。配合計劃任務(wù)粘昨,rsync能實現(xiàn)定時或周期同步;配合inotify或sersync,可以實現(xiàn)觸發(fā)式的實時同步吞瞪。
本篇文章主要介紹rsync的使用方法和它常用的功能芍秆。
rsync官方網(wǎng)站: https://rsync.samba.org/
二、 rsync同步過程講解
不考慮rsync的實現(xiàn)細(xì)節(jié)荆虱,就文件同步而言怀读,涉及了源文件和目標(biāo)文件的概念,還涉及了以哪邊文件為同步基準(zhǔn)惜姐。例如犁跪,想讓目標(biāo)主機(jī)上的文件和本地文件保持同步椿息,則是以本地文件為同步基準(zhǔn)歹袁,將本地文件作為源文件推送到目標(biāo)主機(jī)上坷衍。反之,如果想讓本地主機(jī)上的文件和目標(biāo)主機(jī)上的文件保持同步条舔,則目標(biāo)主機(jī)上的文件為同步基準(zhǔn)枫耳,實現(xiàn)方式是將目標(biāo)主機(jī)上的文件作為源文件拉取到本地。當(dāng)然孟抗,要保持本地的兩個文件相互同步,rsync也一樣能實現(xiàn),這就像Linux中cp命令一樣,以本地某文件作為源姜贡,另一文件作為目標(biāo)文件,但請注意糙申,雖然rsync和cp能達(dá)到相同的目的疙挺,但它們的實現(xiàn)方式是不一樣的搀暑。
既然是文件同步桂敛,在同步過程中必然會涉及到源和目標(biāo)兩文件之間版本控制的問題粗仓,例如是否要刪除源主機(jī)上沒有但目標(biāo)上多出來的文件巴碗,目標(biāo)文件比源文件更新(newer than source)時是否仍要保持同步逸爵,遇到軟鏈接時是拷貝軟鏈接本身還是拷貝軟鏈接所指向的文件,目標(biāo)文件已存在時是否要先對其做個備份等等。
rsync同步過程中由兩部分模式組成:決定哪些文件需要同步的檢查模式以及文件同步時的同步模式搓萧。
(1).檢查模式是指按照指定規(guī)則來檢查哪些文件需要被同步,例如哪些文件是明確被排除不傳輸?shù)那裘怠DJ(rèn)情況下铃在,rsync使用"quick check"算法快速檢查源文件和目標(biāo)文件的大小帘皿、mtime(修改時間)是否一致丁恭,如果不一致則需要傳輸贡必。當(dāng)然理逊,也可以通過在rsync命令行中指定某些選項來改變quick check的檢查模式,比如"--size-only"選項表示"quick check"將僅檢查文件大小不同的文件作為待傳輸文件威蕉。rsync支持非常多的選項,其中檢查模式的自定義性是非常有彈性的但荤。
(2).同步模式是指在文件確定要被同步后赘方,在同步過程發(fā)生之前要做哪些額外工作们镜。例如上文所說的是否要先刪除源主機(jī)上沒有但目標(biāo)主機(jī)上有的文件,是否要先備份已存在的目標(biāo)文件宴树,是否要追蹤鏈接文件等額外操作寒匙。rsync也提供非常多的選項使得同步模式變得更具彈性掸鹅。
相對來說矮嫉,為rsync手動指定同步模式的選項更常見一些熟史,只有在有特殊需求時才指定檢查模式履植,因為大多數(shù)檢查模式選項都可能會影響rsync的性能鼻种。
三、 rsync三種工作方式
以下是rsync的語法:
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:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
由此語法可知,rsync有三種工作方式:
(1).本地文件系統(tǒng)上實現(xiàn)同步褒链。命令行語法格式為上述"Local"段的格式。
(2).本地主機(jī)使用遠(yuǎn)程shell和遠(yuǎn)程主機(jī)通信。命令行語法格式為上述"Access via remote shell"段的格式梳码。
(3).本地主機(jī)通過網(wǎng)絡(luò)套接字連接遠(yuǎn)程主機(jī)上的rsync daemon。命令行語法格式為上述"Access via rsync daemon"段的格式儒恋。
前兩者的本質(zhì)是通過管道通信,即使是遠(yuǎn)程shell怕轿。而方式(3)則是讓遠(yuǎn)程主機(jī)上運行rsync服務(wù)隅俘,使其監(jiān)聽在一個端口上,等待客戶端的連接。
但是嘉熊,還有第四種工作方式:
(4).通過遠(yuǎn)程shell也能臨時啟動一個rsync daemon,這不同于方式(3),它不要求遠(yuǎn)程主機(jī)上事先啟動rsync服務(wù),而是臨時派生出rsync daemon秆撮,它是單用途的一次性daemon觉吭,僅用于臨時讀取daemon的配置文件拒贱,當(dāng)此次rsync同步完成岩调,遠(yuǎn)程shell啟動的rsync daemon進(jìn)程也會自動消逝。此通信方式的命令行語法格式同"Access via rsync daemon"赡盘,但要求options部分必須明確指定"--rsh"選項或其短選項"-e"号枕。
四、 Rsync優(yōu)勢
速度快:除首次全拷貝外陨享,其他時候?qū)崿F(xiàn)增量拷貝葱淳,傳輸速度快
更安全:傳輸數(shù)據(jù)時可用ssh加密傳輸
帶寬占用更少:rsync可對數(shù)據(jù)進(jìn)行分塊壓縮傳輸,相比其他文件傳輸工具占用更少帶寬
權(quán)限限制:非root用戶也可安轉(zhuǎn)和執(zhí)行rsync命令
支持目錄層級遞歸拷貝,可以鏡像保存整個目錄樹和文件系統(tǒng)
支持限速
支持?jǐn)帱c續(xù)傳
支持128位MD4校驗(3.0以后版本使用MD5加密)
可以很容易做到保持原來文件的權(quán)限抛姑、時間赞厕、軟硬鏈接等等
五、 Rsync服務(wù)器端+客戶端環(huán)境部署【yum安裝】
如需源碼安裝定硝,請關(guān)注即將發(fā)布的《詳解Rsync皿桑,一款卓越的增量同步工具(二)》
系統(tǒng)環(huán)境:
服務(wù)器配置:阿里云ECS 11G
操作系統(tǒng):CentOS7.2
rsync 版本:3.1.2
rsync 服務(wù)器:rsync-server (10.168.152.72)
rsync 客戶端:rsync-client (10.117.217.172)
5.1 服務(wù)器端安裝、配置rsync服務(wù)
- 5.1.1 安裝
檢查rsync 是否已經(jīng)安裝
yum list installed | grep rsync
若已安裝蔬啡,無需重新安裝诲侮;若未安裝,用以下命令安裝:
yum install rsync -y
- 5.1.2 服務(wù)器端配置
vim /etc/rsyncd.conf
寫入以下配置到該文件:
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# GLOBAL OPTIONS
uid = root
gid = root
use chroot = no
max connections = 0
pid file = /var/run/rsyncd.pid
#This will give you a separate log file
log file = /var/log/rsync.log
motd file = /etc/rsyncd/rsyncd.motd
lock file = /var/run/rsyncd.lock
secrets file = /etc/rsyncd/rsyncd.secrets
#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes
log format = %t %a %m %f %b
timeout = 300
# MODULE OPTIONS
[appdata]
path = /appdata/
auth users = root
comment = app data
exclude = photos/
- 5.1.3 建立/etc/rsyncd/rsyncd.secrets文件
vim /etc/rsyncd/rsyncd.secrets
輸入箱蟆,格式是“用戶名:口令”沟绪,用戶不要求是系統(tǒng)用戶
root:pwd123456
- 5.1.4 為了密碼的安全性,修改secrets文件權(quán)限為600
chmod 600 /etc/rsyncd/rsyncd.secrets
- 5.1.5 建立連接到服務(wù)器的客戶端看到的歡迎信息文件/etc/rsyncd/rsyncd.motd
vim /etc/rsyncd/rsyncd.motd
輸入:
======welcome to synchronize appdata======
- 5.1.6 啟動rsync服務(wù)
rsync --daemon
- 5.1.7 查看873端口是否起來
netstat -tunpl
如果rsync啟動成功空猜,可以看到873端口已經(jīng)在監(jiān)聽了绽慈。
5.2 客戶端服務(wù)器配置
- 5.2.1 安裝
檢查rsync 是否已經(jīng)安裝
yum list installed | grep rsync
若已安裝恨旱,無需重新安裝;若未安裝坝疼,用以下命令安裝:
yum install rsync -y
- 5.2.2 啟動rsync服務(wù)
rsync --daemon
5.3 通過rsync客戶端同步數(shù)據(jù)
更多同步數(shù)據(jù)的場景演示搜贤,請關(guān)注即將發(fā)布的《詳解Rsync,一款卓越的增量同步工具(二)》
六裙士、Rsync配置文件全解析
配置文件 rsyncd.conf 由全局配置和若干模塊配置組成入客。配置文件的語法為:
模塊以 [模塊名] 開始
-
參數(shù)配置行的格式是 name = value ,其中 value 可以有兩種數(shù)據(jù)類型:
字符串(可以不用引號定界字符串)
布爾值(1/0 或 yes/no 或 true/false)
以 # 或 ; 開始的行為注釋
\ 為續(xù)行符
全局參數(shù)
在文件中 [module] 之外的所有配置行都是全局參數(shù)腿椎。當(dāng)然也可以在全局參數(shù)部分定義模塊參數(shù)桌硫,這時該參數(shù)的值就是所有模塊的默認(rèn)值。
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
address | 在獨立運行時啃炸,用于指定的服務(wù)器運行的 IP 地址铆隘。由 xinetd 運行時將忽略此參數(shù),使用命令行上的 –address 選項替代南用。 | 本地所有IP |
port | 指定 rsync 守護(hù)進(jìn)程監(jiān)聽的端口號膀钠。 由 xinetd 運行時將忽略此參數(shù),使用命令行上的–port 選項替代裹虫。 | 873 |
motd file | 指定一個消息文件肿嘲,當(dāng)客戶連接服務(wù)器時該文件的內(nèi)容顯示給客戶。 | 無 |
pid file | rsync 的守護(hù)進(jìn)程將其 PID 寫入指定的文件筑公。 | 無 |
log file | 指定 rsync 守護(hù)進(jìn)程的日志文件雳窟,而不將日志發(fā)送給 syslog。 | 無 |
syslog facility | 指定 rsync 發(fā)送日志消息給 syslog 時的消息級別匣屡。 | daemon |
socket options | 指定自定義 TCP 選項封救。 | 無 |
模塊參數(shù)
模塊參數(shù)主要用于定義 rsync 服務(wù)器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式捣作,這個名字就是在 rsync 客戶端看到的名字誉结,類似于 Samba 服務(wù)器提供的共享名。而服務(wù)器真正同步的數(shù)據(jù)是通過 path 來指定的券躁〕涂樱可以根據(jù)自己的需要,來指定多個模塊也拜,模塊中可以定義以下參數(shù):
a. 基本模塊參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
path | 指定當(dāng)前模塊在 rsync 服務(wù)器上的同步路徑旭贬,該參數(shù)是必須指定的。 | 無 |
comment | 給模塊指定一個描述搪泳,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。 | 無 |
b. 模塊控制參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
use chroot | 若為 true扼脐,則 rsync 在傳輸文件之前首先 chroot 到 path 參數(shù)所指定的目錄下岸军。這樣做的原因是實現(xiàn)額外的安全防護(hù)奋刽,但是缺點是需要 root 權(quán)限,并且不能備份指向 path 外部的符號連接所指向的目錄文件艰赞。 | true |
uid | 指定該模塊以指定的 UID 傳輸文件佣谐。 | nobody |
gid | 指定該模塊以指定的 GID 傳輸文件。 | nobody |
max connections | 指定該模塊的最大并發(fā)連接數(shù)量以保護(hù)服務(wù)器方妖,超過限制的連接請求將被告知隨后再試狭魂。 | 0(沒有限制) |
lock file | 指定支持 max connections 參數(shù)的鎖文件。 | /var/run/rsyncd.lock |
list | 指定當(dāng)客戶請求列出可以使用的模塊列表時党觅,該模塊是否應(yīng)該被列出雌澄。如果設(shè)置該選項為 false,可以創(chuàng)建隱藏的模塊杯瞻。 | true |
read only | 指定是否允許客戶上傳文件镐牺。若為 true 則不允許上傳;若為 false 并且服務(wù)器目錄也具有讀寫權(quán)限則允許上傳魁莉。 | true |
write only | 指定是否允許客戶下載文件睬涧。若為 true 則不允許下載;若為 false 并且服務(wù)器目錄也具有讀權(quán)限則允許下載旗唁。 | false |
ignore errors | 指定在 rsync 服務(wù)器上運行 delete 操作時是否忽略 I/O 錯誤畦浓。一般來說 rsync 在出現(xiàn) I/O 錯誤時將將跳過 –delete 操作,以防止因為暫時的資源不足或其它 I/O 錯誤導(dǎo)致的嚴(yán)重問題检疫。 | true |
ignore nonreadable | 指定 rysnc 服務(wù)器完全忽略那些用戶沒有訪問權(quán)限的文件讶请。這對于在需要備份的目錄中有些不應(yīng)該被備份者獲得的文件時是有意義的。 | false |
timeout | 該選項可以覆蓋客戶指定的 IP 超時時間电谣。從而確保 rsync 服務(wù)器不會永遠(yuǎn)等待一個崩潰的客戶端秽梅。對于匿名 rsync 服務(wù)器來說,理想的數(shù)字是 600(單位為秒)剿牺。 | 0 (未限制) |
dont compress | 用來指定那些在傳輸之前不進(jìn)行壓縮處理的文件企垦。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名晒来,而不能是簡稱钞诡。當(dāng)發(fā)生拒絕某個選項的情況時,服務(wù)器將報告錯誤信息然后退出湃崩。例如荧降,要防止使用壓縮,應(yīng)該是:”dont compress = *”攒读。 | *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
c. 模塊文件篩選參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
exclude | 指定多個由空格隔開的多個文件或目錄(相對路徑)朵诫,并將其添加到 exclude 列表中。這等同于在客戶端命令中使用 –exclude 來指定模式薄扁。 | 空 |
exclude from | 指定一個包含 exclude 規(guī)則定義的文件名剪返,服務(wù)器從該文件中讀取 exclude 列表定義废累。 | 空 |
include | 指定多個由空格隔開的多個文件或目錄(相對路徑)念赶,并將其添加到 include 列表中违崇。這等同于在客戶端命令中使用 –include 來指定模式 兆沙。 | 空 |
include from | 指定一個包含 include 規(guī)則定義的文件名候引,服務(wù)器從該文件中讀取 include 列表定義码倦。 | 空 |
- 一個模塊只能指定一個exclude 參數(shù)址儒、一個include 參數(shù)捕发。
- 結(jié)合 include 和 exclude 可以定義復(fù)雜的exclude/include 規(guī)則 庙楚。
- 這幾個參數(shù)分別與相應(yīng)的rsync 客戶命令選項等價面哥,唯一不同的是它們作用在服務(wù)器端哎壳。
- 關(guān)于如何書寫規(guī)則文件的內(nèi)容請參考http://www.howtocn.org/rsync:use_rsync。
d. 模塊用戶認(rèn)證參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
auth users | 指定由空格或逗號分隔的用戶名列表幢竹,只有這些用戶才允許連接該模塊耳峦。這里的用戶和系統(tǒng)用戶沒有任何關(guān)系。用戶名和口令以明文方式存放在 secrets file 參數(shù)指定的文件中焕毫。 | (匿名方式) |
secrets file | 指定一個 rsync 認(rèn)證口令文件蹲坷。只有在 auth users 被定義時,該文件才起作用邑飒。 | 空 |
strict modes | 指定是否監(jiān)測口令文件的權(quán)限循签。若為 true 則口令文件只能被 rsync 服務(wù)器運行身份的用戶訪問,其他任何用戶不可以訪問該文件疙咸。 | true |
- rsync 認(rèn)證口令文件的權(quán)限一定是 600县匠,否則客戶端將不能連接服務(wù)器。
- rsync 認(rèn)證口令文件中每一行指定一個 用戶名:口令對撒轮,
格式為:username:passwd
- 一般來說口令最好不要超過8個字符乞旦。若您只配置匿名訪問的 rsync 服務(wù)器,則無需設(shè)置上述參數(shù)题山。
e. 模塊訪問控制參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
hosts allow | 用一個主機(jī)列表指定哪些主機(jī)客戶允許連接該模塊兰粉。不匹配主機(jī)列表的主機(jī)將被拒絕。 | * |
hosts deny | 用一個主機(jī)列表指定哪些主機(jī)客戶不允許連接該模塊顶瞳。 | 空 |
客戶主機(jī)列表定義可以是以下形式:
- 單個IP地址玖姑。例如:192.168.0.1
- 整個網(wǎng)段。例如:192.168.0.0/24慨菱,192.168.0.0/255.255.255.0
- 可解析的單個主機(jī)名焰络。例如:centos,centos.bsmart.cn
- 域內(nèi)的所有主機(jī)符喝。例如:*.bsmart.cn
- “*”則表示所有闪彼。
- 多個列表項要用空格間隔。
f. 模塊日志參數(shù)
參數(shù) | 說明 | 默認(rèn)值 |
---|---|---|
transfer logging | 使 rsync 服務(wù)器將傳輸操作記錄到傳輸日志文件协饲。 | false |
log format | 指定傳輸日志文件的字段备蚓。 | ”%o %h [%a] %m (%u) %f %l” |
設(shè)置了”log file”參數(shù)時课蔬,在日志每行的開始會添加”%t [%p]“。
可以使用的日志格式定義符如下所示:
%a - 遠(yuǎn)程IP地址
%h - 遠(yuǎn)程主機(jī)名
%l - 文件長度字符數(shù)
%p - 該次 rsync 會話的 PID
%o - 操作類型:”send” 或 “recv”
%f - 文件名
%P - 模塊路徑
%m - 模塊名
%t - 當(dāng)前時間
%u - 認(rèn)證的用戶名(匿名時是 null)
%b - 實際傳輸?shù)淖止?jié)數(shù)
%c - 當(dāng)發(fā)送文件時郊尝,記錄該文件的校驗碼