RSYNC簡介:
Rsync (remote sync)是一款開源、快速,多功能、可實作增量的本地或遠端資料鏡像同步備份優秀工具。它可通過 LAN/WAN 快速同步多台主機間的檔案。Rsync 本來是用以取代rcp 的一個工具,它目前由 Rsync.samba.org 維護。Rsync 使用所謂的“Rsync演算法”來使本地和遠端主機之間的檔案達到同步,該算法隻傳送兩個檔案中的不同部分,而不是每次都整份傳送,是以速度相當快。
Rsync支援大多數的類 Unix 系統,無論是 Linux、Solaris 還是 BSD 上都經過了良好的測試。此外,它在windows 平台下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS。
RSYNC的特性:
1、支援拷貝特殊檔案如連結、裝置等。
2、可以有排除制定檔案或目錄同步的功能,相當于打包指令tar。
3、可以做到保持原來檔案或目錄的權限、時間、軟硬連接配接等所有屬性均不改變。
4、可實作增量同步,既隻同步發生變化的資料,是以資料傳輸效率很高。
5、可以使用rcp,rsh,ssh等方式配合傳輸檔案,也可以通過直接的socket連接配接。
6、支援匿名的或認證的程序模式傳輸,友善進行資料備份及鏡像
7、優化的流程,檔案傳輸效率高
RSYNC工作模式:
Rsync有四種工作模式,具體如下:
1、清單模式
和ls -l相似,負責列出源的内容。不僅可以看本地還可以看遠端。
2、shell模式,也稱為本地模式
和cp相似,本地拷貝檔案
3、遠端shell模式,可以通過通過rcp,ssh等通道傳輸
和rcp相似,不過可以實作增量備份,并且能夠通過安全的ssh方式進行資料傳輸。
4、伺服器模式
在這種模式下,rsync 守護程序在一台機器上永久運作,接收檔案傳輸請求。可以把檔案發送給守護程序,也可以向它請求檔案。伺服器模式非常适合建立中心備份伺服器或項目存儲庫。
以上是對rsync做的一個簡單介紹,下面來安裝一下rsync,然後再詳細介紹我們rsync的四種工作模式!
環境
CentOS6.5 x86_64位 采用最小化安裝,系統經過了基本優化
selinux為關閉狀态,iptables為無限制模式
源碼包存放位置:/root
在安裝之前,首先讓我們看下系統上是否已經安裝了rsync。
[root@rsync-server ~]# rpm -qa|grep rsync
rsync-3.0.6-9.el6_4.1.x86_64
如果出現如上的情況,說明我們的系統已經安裝了rsync。如果沒有出現,就說明沒有安裝。
如果系統沒有安裝,我們就需要自己安裝了。安裝rsync的方式一共有2種,一種是基于包管理器安裝,比如rpm包之類,另外一種是基于源碼安裝。
1、基于包管理器安裝
[root@rsync-server ~]# yum install rsync -y
2、基于源碼安裝
a、安裝缺少的gcc和庫檔案等
[root@rsync-server ~]# yum install -y kernel-headers glibc-headers glibc-devel libgomp gcc gcc-c++
b、安裝rsync
[root@rsync-server ~]# wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz
[root@rsync-server ~]# tar zxvf rsync-3.1.1.tar.gz
[root@rsync-server ~]# cd rsync-3.1.1
[root@rsync-server rsync-3.1.1]# ./configure --prefix=/usr/local/rsync[root@rsync-server rsync-3.1.1]# make && make install
這樣子rsync就安裝完成了。
我們需要注意的是,源碼安裝的rsync預設是沒有加入xinetd的,是以你會發現,在/etc/xinetd.d目錄下找不到rsync檔案。
下面,我就開始帶着大家一起來了解下rsync的四種模式!
1、清單模式(list mode)
Rsync的清單模式,即等同于在實作 ls -l 的功能。我們可以通過分别執行rsync和ls指令來觀察差別。
[root@rsync-server /]# rsync /rsync
drwxr-xr-x 4096 2014/06/04 00:45:06 rsync
[root@rsync-server /]# rsync /rsync/
drwxr-xr-x 4096 2014/06/04 00:45:06 .
-rw-r--r-- 0 2014/06/04 00:45:01 a
-rw-r--r-- 0 2014/06/04 00:45:03 b
-rw-r--r-- 0 2014/06/04 00:45:05 c
-rw-r--r-- 0 2014/06/04 00:45:06 d
[root@rsync-server /]# ls -dl /rsync
drwxr-xr-x. 2 root root 4096 Jun 4 00:45 /rsync
[root@rsync-server /]# ls -l /rsync
total 0
-rw-r--r--. 1 root root 0 Jun 4 00:45 a
-rw-r--r--. 1 root root 0 Jun 4 00:45 b
-rw-r--r--. 1 root root 0 Jun 4 00:45 c
-rw-r--r--. 1 root root 0 Jun 4 00:45 d
通過上面的輸出,可以看出來,rsync後跟檔案或目錄和ls -l後跟檔案和目錄的效果大體相同(不一樣的細節,這裡不多描述)。需要注意的是,如果你身處某個目錄,你ll能檢視到所在目錄下檔案清單的詳細資訊。但是你執行rsync會報錯,是以rsync必須後跟檔案或目錄才能檢視相關的詳細資訊。
另外,rsync的清單模式是支援對遠端的目錄進行檢視的,而ls -l是不具備這個功能的。
[root@rsync-server /]#
2、Shell模式(shell mode)
在 RSYNC 的 shell 模式(本地模式)中,我會列舉rsync指令的用法和正常選項資訊。
首先來看下 RSYNC 的指令文法:
rsync [OPTION]... SRC [SRC]... DEST
執行rsync --help可得到上面輸出,當然輸出不僅僅隻有上面這一條,我僅僅将shell模式的語句摘了出來。下面對該條語句進行拆解。
rsync [OPTION]... SRC [SRC]... DEST
1)rsync為同步的指令
2)[OPTION]... 為同步時的參數選項
3)SRC為源,即需要拷貝的分區,檔案或目錄等
4)[DEST]為目地分區,檔案或目錄等
rsync 常用的參數選項有如下:
-n : 如果擔心指令執行不正确,一同步複制,可能這個複制的後果是緻命的,那後果可就嚴重了,這裡我們可以加-n先測試一下
-v : --verbose,詳細輸出模式,顯示詳細過程
-q : --quiet,靜默模式,盡可能輸出少的資訊
-c : --checksum,可以對傳輸的檔案進行較驗的,強制對檔案傳輸進行校驗
-r : --recursive,遞歸複制
-p : --perms,儲存檔案的權限
-t : --times,保留檔案的時間戳
-l : --links,保留檔案的符号連結
-u : update, 僅僅進行更新發生變化的資料
-g : --group,保留檔案的屬組
-o : --owner,保留檔案的屬主
-D : --devices,保留裝置檔案
-A : --acls,保留acl通路控制清單
-a : --archives歸檔,複制時可以儲存原有的屬主屬主等屬性資訊,甚至包括一點額外的屬性。等同于-rlptgoD
-e SSH : 遠端複制時,表示使用ssh協定作承載。如果ssh端口不是22,可以用-e ‘ssh -p 22’
-z : 基于網絡時使用,對檔案壓縮後傳輸
--progress : 顯示壓縮進度條的,簡寫-P
--stats : 顯示如何執行壓縮和傳輸的,也就是顯示傳輸狀态的
--
更多的詳細資訊,請通過man rsync來進行檢視。
需要注意的是:rsync指令在使用中,如果源參數的末尾有斜線,就會複制指定目錄内的内容,而不複制目錄本身;如果沒有斜線,則會複制目錄本身。目标參數的末尾有沒有斜線都不影響。
接下來,請看下面兩個例子:
[root@rsync-server /]# rsync -a /rsync /backup #會把目錄rsync直接同步至/backup目錄中去
[root@rsync-server /]# rsync -a /rsync/ /backup #會把目錄中的data/中的内容同步至/backups目錄中
現在,我們在shell模式下,進行rsync的同步。
執行個體1:測試本地rsync同步
[root@rsync-server ~]# mkdir /rsync #建立rsync測試目錄
[root@rsync-server ~]# touch /rsync/test #在rsync測試目錄下建立test.txt檔案
[root@rsync-server ~]# chmod -R 700 /rsync #授權一下以檢視同步後是不是保持了權限屬性
[root@rsync-server rsync]# ll -a /rsync/
total 8
drwx------. 2 root root 4096 Jun 4 01:01 .
dr-xr-xr-x. 26 root root 4096 Jun 4 01:01 ..
-rwx------. 1 root root 0 Jun 4 01:01 test
[root@rsync-server ~]# rsync -avz /rsync/ /tmp
sending incremental file list
./
test
sent 78 bytes received 34 bytes 224.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-server ~]# ls -l /tmp/test
-rwx------. 1 root root 0 Jun 4 01:01 /tmp/test
上面的例子,示範了将本地/rsync目錄下的檔案,同步到/tmp目錄下。其中使用的參數,-avz上面講過。如果不明白,可以去上面看每個參數的詳細介紹。
3、遠端shell模式(remote shell mode)
遠端shell模式的話,和shell模式是異曲同工。隻不過,因為是要通過遠端,是以我們需要指定遠端主機的IP,如果采用ssh我們還需要指定ssh的端口等等。
遠端shell模式,正常分為如下兩種情況,其文法分别為:
拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]
下面為大家拆解一下指令:
1)Rsync為同步的指令
3)[USER@]HOST... 為Rsync同步的遠端的連接配接使用者和主機位址
4)SRC為源,即需要拷貝的分區、檔案或目錄等,和HOST之間用一個冒号連接配接
5)[DEST]為目地分區、檔案或目錄等
大家可以發現,拉取和推送,不一樣的地方就是源和目标換了位置。其中拉取,表示從遠端主機把資料同步到執行指令的本地主機相應目錄。(需要注意,拉取的話,遠端主機上一定要安裝rsync,不然會拉取失敗)。推送,表示從本地主機執行指令把本地的資料同步到遠端主機指定目錄下
下面我們來看一個案例:
拉取執行個體:
老大要求拉取172.16.100.1這台伺服器上的etc目錄到我們的備份伺服器172.16.100.2上的/backup目錄下。
操作:
通過ssh連接配接到172.16.100.1這台伺服器上,然後執行如下指令:
[root@rsync-server ~]# rsync -vzrtopg --progress -e ‘ssh -p 22’ [email protected]:/etc /backup
文法說明:
1)-vzrtopg 相當于上文的-avz,表示同步時檔案和目錄屬性不變。
2)--progress 顯示同步的過程,可以用-p替換
3)-e ‘ssh -p 22’,表示通過ssh的通道傳輸資料。如果ssh是預設的22号端口,此處的-p 22可省略。
4)[email protected]:/etc 遠端的主機使用者,位址,路徑
5)/backup本地(172.16.100.2)的路徑
推送執行個體:
公司内部有一台svn伺服器(172.16.100.2),公司站點的更新代碼通過背景的測試伺服器測試之後,經過svn同步到svn伺服器。老大要求你将svn伺服器上的代碼,推送到前台的伺服器(172.16.100.1)上。
操作:通過ssh連接配接到svn伺服器(172.16.100.2)上,然後執行如下指令
[root@rsync-server ~]# rsync -avz --progress -e ‘shh -p 22’ /webrepo [email protected]:/data/web/html
特别說明:
1)上面兩個例子中的資料同步都是加密傳輸的,因為是通過ssh通道進行資料傳輸的。
2)在傳輸前需要進行連接配接使用者(一般為系統使用者)密碼驗證,需要手工輸入。這裡我們可以通過配置ssh互信來實作免驗證方式同步。
3)rsync軟體必須安裝在本地及遠端伺服器上
4、服務模式(daemon mode)
RSYNC的服務模式,部署時分為rsync的服務端和rsync的用戶端。需要注意的是,rsync 的服務端和用戶端都是一個軟體包,如果你啟用了 rsync 的服務模式,則該主機就變成 rsync 伺服器。是以我們需要将 rsync 分别安裝于服務端和用戶端,服務端和用戶端使用同一個 rsync 軟體包來實作遠端鏡像和定期同步更新。
rsync 服務端可同時備份多個用戶端的資料,多個服務端備份一個用戶端的資料。 rsync 預設端口為 873,伺服器在該端口接收客戶的匿名或者認證方式的備份請求。
rsync 服務端在使用之前需要進行必要的配置,其配置檔案為 /etc/rsyncd.conf,該檔案預設沒有,需要自己手動建立。Rsync服務端通過/etc/rsyncd.conf進行認證、通路、日志記錄等控制,該配置檔案包括全局參數、子產品參數等設定。
rsyncd.conf 檔案中 [module] 之前的所有參數為全局參數,也可以在全局參數部分定義子產品參數。在這種情況下該參數的值就是所有子產品的預設值。全局參數設定程式使用的端口号,指定消息檔案、日志檔案 pid 檔案以及發送日志消息的級别。子產品參數主要定義服務端哪個目錄需要被同步。使用者可根據不同的需要指定多個子產品,每個子產品對應需要備份的一個目錄樹,即若有 N 個需要備份的目錄樹,則需要 N 個子產品與之對應。子產品中可以定義許多參數。下面,我們拿出來一個rsyncd.conf檔案,來給大家做詳解:
uid = rsync # 指定的子產品傳輸檔案時所用的使用者身份
gid = rsync # 指定的site子產品傳輸檔案時所用的使用者組身份
port=873 # 預設端口
use chroot = no # 預設為true,修改為no,增加對目錄檔案軟連接配接的備份
max connections = 200 # 指定最大并發連接配接數以保護伺服器,超過限制的連接配接請求将被告知随後再試。預設值為 0,即沒有限制。
timeout = 300 # 伺服器會話的逾時時間
pid file = /var/run/rsyncd.pid # 程序啟動後,程序号存放路徑
lock file = /var/run/rsyncd.lock # 服務啟動、停止會用到鎖檔案
log file = /var/log/rsyncd.log # 指定日志檔案的路徑
Log fromat = %h %o %f %l %b # 指定日志記錄的格式
motd file = /etc/rsyncd.motd # 登陸消息提示檔案,可以不配置。預設為空。
[test] # 子產品名稱,名稱可以任意寫,不過一般是以路徑命名,最好見名意
Comment = test # 子產品資訊描述,該描述連同子產品名在客戶連接配接得到子產品清單時顯示給客戶。預設沒有描述定義
path=/test/ # 指定供備份的目錄路徑,必須指定該參數。該目錄路徑是rsync服務端的一個路徑,提供給用戶端上傳或下載下傳
ignore erros # 忽略錯誤
read only = false # 設定是否允許客戶上載檔案。若為 true 任何上載請求均會失敗,若為 false 且用戶端擁有伺服器目錄讀寫權限則可以上載。預設值為 true 。
write only 設定是否允許客戶下載下傳檔案。若為 true 任何下載下傳請求均會失敗,預設值為 false 。
list = false # 設定當客戶請求可以使用的子產品清單時,是否列出該子產品。若為 false,則建立隐藏的子產品。預設值為 true
hosts allow=192.168.137.0/24 # 指定允許客戶連接配接的 IP 位址。可以為單個 IP 位址或整個網段。多個 IP 或網段需要以空格隔開。預設是允許所有主機連接配接。
hosts deny=* # 指定拒絕連接配接的客戶IP位址,設定方式和hosts allow相同。
Dont commpress # 指定不進行壓縮處理即可傳輸的檔案,預設值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
auth users = rsync_backup # 該選項指定由空格或逗号分隔的使用者名清單,隻有這些使用者才允許連接配接該子產品。這裡的使用者不一定是用戶端存在的使用者。如果"auth users"被設定,那麼用戶端發出對該子產品的連接配接請求時,需要對使用者身份進行驗證。使用者的名和密碼以明文方式存放在"secrets file"選項指定的檔案中。預設情況下無需密碼就可以連接配接子產品 ( 也就是匿名方式 )。
secrets file = /etc/rsync.password # 虛拟使用者的密碼檔案
exclude = common/ # 用來指定多個由空格隔開的多個檔案或目錄 ( 相對路徑 ),并将其添加到 exclude 清單中。這等同于在用戶端指令中使用 --exclude 參數。一個子產品隻能指定一個 exclude 選項。但是需要注意的一點是該選項有一定的安全性問題,用戶端很有可能繞過 exclude 清單,如果希望確定特定的檔案不能被通路,那就最好結合 uid/gid 選項一起使用。
pre-xfer exec, post-xfer exec # 設定可在檔案傳輸前/後執行的指令。若在檔案傳輸前執行的指令失敗,則取消本次傳輸操作。
以上就是,rsyncd.conf的詳細配置資訊了。我将很多的預設不顯示的參數也列舉了出來,大家使用的時候可以靈活掌握。
下面,我就帶大家來一起配置一個 rsync的服務端和rsync的用戶端!
伺服器架構:
rsync-server:172.16.100.1
rsync-client:172.16.100.2
RSYNC 服務端部署:
1、安裝rsync,并且配置服務端主配置檔案
[root@rsync-server ~]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.100.0/24
hosts deny = *
auth users = rsync_backup
secrets file = /etc/rsync.password
[sunsky]
path = /test
2、建立 rsync.password 作為使用者密碼檔案
[root@rsync-server ~]# touch /etc/rsync.passord
[root@rsync-server ~]# chmod 600 /etc/rsyncd.password
[root@rsync-server ~]# vim rsyncd.password #裡面記錄條目的格式為“使用者 : 密碼”
rsync_backup:redhat
ps: /etc/rsyncd.password 的權限必須是600,用戶端的/etc/rsync.password也必須為600,不然請求檔案時會報錯
3、(可選)建立 rsync.motd 作為登入消息檔案。該檔案為選擇性配置檔案,生産環境不推薦使用。
[root@rsync-server ~]# touch /etc/rsyncd.motd
[root@rsync-server ~]# vim rsyncd.conf
============================
This is Critical Data Server
=============================
4、建立子產品中指定的檔案
[root@rsync-server ~]# mkdir /test
[root@rsync-server ~]# chown root.root /test #更改目錄的權限為rsyncd.conf中uid和gid指定屬主和屬組
5、以守護程序方式啟動 rsync
Rsync服務端的啟動分2種,一種是交給 xinetd 去管理,另外就是自己手動配置守護程序。
A、手動配置rsync守護程序
[root@rsync-server ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf #注意如果你的rsyncd.conf檔案在/etc/目錄下,就不需要再用--config去指定了。--daemon是以守護程序的方式啟動
我們可以将上面的指令寫入 /etc/rc.local 中,這樣當系統啟動時,就會自動以守護程序的方式去運作 rsync。
補充:
重新開機rsync的組合指令
[root@rsync-server ~]# pkill rsync #關閉rsync服務
[root@rsync-server ~]# rsync --daemon #啟動rsync服務
[root@rsync-server ~]# ps -ef | grep rsync #檢查是否啟動
B、交由xinetd管理
[root@rsync-server ~]# yum install xinetd #安裝xinetd
[root@rsync-server ~]# vim /etc/xinetd.d/rsync
disable= no # 預設為yes,需要将他設定為no,讓xinetd接管rsync服務。注意,如果你使用手動的方式,這裡就修改為no,即拒絕xinetd接管rsync服務。
[root@rsync-server ~]# /etc/init.d/xinetd start # 啟動xinetd服務,則預設會以守護程序方式啟動rsync 服務
6、檢查服務狀态
[root@rsync-server ~]# netstat -lntup |grep 873
[root@rsync-server test]# netstat -lntup |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 10234/rsync
tcp 0 0 :::873 :::* LISTEN 10234/rsync
或者
[root@rsync-server ~]# lsof -i tcp:873
[root@a test]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 10234 root 3u IPv4 93239 0t0 TCP *:rsync (LISTEN)
rsync 10234 root 5u IPv6 93240 0t0 TCP *:rsync (LISTEN)
手動啟動rsync的常見參數:
[root@rsync-server ~]# rsync --daemon # daemon 表示以守護程序的方式啟動rsync服務
常用啟動參數:
--daemon # 表示以守護程序的方式啟動rsync服務
--address # 綁定指定ip位址提供服務,即伺服器是多網卡模式或多虛拟IP模式,需要指定某個固定ip提供服務
--config=FILE # 更改配置檔案路徑,而不去使用預設的/etc/rsyncd.conf
--port=PORT # 更改其它端口提供服務,而不去使用模式的873端口。
以上即為rsync服務端的整個配置步驟了!
RSYNC 服務端已經部署完畢,接下來如果要使用的話,肯定還需要搭配 rsync 用戶端才行!下面就來看,rsync用戶端怎麼部署!
RSYNC 用戶端部署
RSYNC 用戶端部署起來非常簡單,我們僅僅需要安裝 rsync 軟體,然後建立一個本地密碼檔案。該密碼檔案為對應rsync 服務端配置檔案裡面每個子產品下面的虛拟使用者的密碼,以此來實作免密碼同步!
操作如下:
1、安裝rsync
2、配置本地密碼檔案
[root@rsync-server ~]# vim /etc/rsync.password # 該檔案裡面僅存放密碼即可
redhat
[root@rsync-server ~]# cat /etc/rsync.password # 配置完畢之後檢查
[root@rsync-server ~]# ll /etc/rsync.password # 配置完畢之後檢查
OK!!!
RSYNC的服務端和用戶端都配置完畢,現在我們可以進行測試了。
我們需要去rsync用戶端,來完成下面的測試操作。需要注意,測試同樣分為兩種情況,每種情況又有兩種文法寫法,分别為:
拉取:①rsync [OPTION...] [USER@]HOST::SRC... [DEST]
②rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推送:①rsync [OPTION...] SRC... [USER@]HOST:DEST
②rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
特别值得注意的是,與遠端shell模式指令不同的是,第①種文法格式, [USER@]HOST::SRC和 [USER@]HOST::DEST結尾處,均為雙冒号連接配接SRC或DEST。另外,這個SRC或DEST已經不再是路徑了,而是守護程序中配置的子產品的名稱了。
下面列舉我們在rsync用戶端上,對rsync服務端進行拉取或推送的操作範例:
第一種格式:
拉取:
rsync -avzP [email protected]::sunsky /test/ --password-file=/etc/rsync.password
推送:
rsync -avzP /test [email protected]::sunsky --password-file=/etc/rsync.password
第二種格式:
拉取:
rsync -avzP rsync://[email protected]:/sunsky/ /test/ --password-file=/etc/rsync.password
推送:
rsync -avzP /test/ rsync://[email protected]:/sunsky/ --password-file=/etc/rsync.password
以上就是,rsync整個服務端和用戶端的配置。
在生産環境中,我們可以專門部署一台rsync伺服器,專門負責接收業務伺服器的日志歸檔和配置檔案歸檔。當然,我們也可以部署在svn伺服器之前,來作為網站代碼推送的伺服器,或者說一台web伺服器專門用來做分發的時候。
但是我們知道,我們的日志歸檔都是在淩晨,是以我們不可能天天晚上去做向rsync服務端的推送操作。并且,如果日常web内容做分發的次數頻繁的話,我們不可能每時每刻都盯着它去做手動推送。是以我們可以借助crontab計劃任務來實作定時推送。
[root@rsync-server ~]# crontab -e
# Automatic synchronization log files at 1 a.m
* 1 * * * /usr/bin/rsync-avzP [email protected]::weblog /data/log/ --password-file=/etc/rsyncd.passwd > /dev/null 2>&1
# Automatic distribution site file points every second of every day
* * * * * /usr/bin/rsync-avzP --delete [email protected]::webdata /data/web/ --password-file=/etc/rsyncd.passwd > /dev/null 2>&1
注意:上面用到的weblog和webdata都是子產品的名字,我們在rsyncd.conf裡面指定子產品所對應的目錄路徑。
但是,我們仍然會發現一個問題,雖然使用計劃認為能滿足我們的日志歸檔定時推送到rsync服務端,但是每次都有1分鐘的延遲。并且,在某些作為網站釋出平台的情況下,rsync每分鐘都去檢查整體一緻性然後做推送,這樣子非常耗費資源。是以,我們需要對此種情況進行改良。在後面一篇博文,我會帶大家一起了解rsync+inotify,借助rsync+inotify來實作實時同步檔案。
在本文最後面,我貼上rsync的--delete和--exclude的操作效果!
--delete操作如下:
[root@rsync-server ~]# ls /test/ #檢視rsync服務端,sunsky子產品下的/test目錄的檔案清單
e
[root@rsync-client ~]# ls /test/ #檢視rsync用戶端本地/test目錄的檔案清單
a b c d
以上為操作前的環境,請保持這個環境一緻,然後做如下操作:(下面的推送和拉取都是基于此環境做的)
在rsync用戶端做拉取操作:
[root@rsync-client ~]# rsync -avzP --delete [email protected]::sunsky /test/ --password-file=/etc/rsync.password
receiving incremental file list
deleting d
deleting c
deleting b
deleting a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
sent 86 bytes received 143 bytes 458.00 bytes/sec
[root@rsync-client ~]# ls /test/
[root@rsync-server ~]# ls /test/
我們發現,rsync用戶端本身的a,b,c,d檔案都消失了,取而代之的是e檔案,并且我們在rsync的拉取過程中,也能看到删除操作!
在rsync用戶端做推送操作:
[root@rsync-client ~]# rsync -avzP --delete /test/ [email protected]::sunsky --password-file=/etc/rsync.password
deleting e
a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/5)
b
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/5)
c
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=1/5)
d
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=0/5)
sent 201 bytes received 87 bytes 576.00 bytes/sec
我們發現,rsync服務端本身的e檔案消失了,取而代之的是a,b,c,d檔案,并且我們在rsync的推送過程中,也能看到删除操作!
--exclude操作如下:
[root@rsync-server ~]# tree /test/
/test/
0 directories, 0 files
[root@rsync-client ~]# tree /test/
├── a
├── b
├── c.txt
├── x
│ └── xxx.txt
└── x.txt
2 directories, 4 files
以上為操作前的環境,請保持這個環境一緻,然後做如下操作:
[root@rsync-client ~]# rsync -avz --exclude=*.txt /test/ [email protected]:/test/
[email protected]'s password:
x/
sent 154 bytes received 57 bytes 60.29 bytes/sec
在rsync服務端進行檢視同步效果:
└── x
1 directory, 2 files
我們可以發現,隻要是能被*.txt比對到的都沒有被推送過去!
如果說,你有很多需要排除的目錄或者檔案,不希望他們被同步過去,此時你可以使用--exclude-from參數,該參數後面跟一個檔案,你可以将需要比對排除的項寫到該檔案裡面!
例子:
[root@rsync-client ~]# cat /tmp/exclude
x
*.txt
[root@rsync-client ~]# rsync -avz --exclude-from=/tmp/exclude /test/ [email protected]:/test/
xx/
sent 151 bytes received 57 bytes 59.43 bytes/sec
└── xx
以上就是我們的--exclude和--exclude-from的詳細用法!