實踐記錄之-Rsync鏡像備份

本文參考原博主:http://shitouququ.blog.51cto.com 的博文進行實踐.在此謝過.


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

先檢查系統有沒有安裝:  rpm -qa rsync

如有返回,則系統已經安裝過.

安裝rsync有兩種方式 .一種是yum安裝,另一種是編譯安裝

yum安裝:  

yum install -y rsync

編譯安裝:

 #安裝GCC和庫文件: 
 yum install -y kernel-headers glibc-headers glibc-devel libgomp gcc  gcc-c++ 
 #安裝rsync
  wget  http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz 
  tar zxvf rsync-3.1.1.tar.gz 
  cd rsync-3.1.1 
  ./configure --prefix=/usr/local/rsync
   make && make install

1、列表模式

     Rsync的列表模式,即等同於在實現 ls -l 的功能。我們可以通過分別執行rsync和ls命令來觀察區別。

[root@localhost /]# rsync /usr/
drwxr-xr-x        4096 2014/07/10 10:46:05 .
lrwxrwxrwx          10 2014/07/10 10:46:05 tmp
dr-xr-xr-x       12288 2014/07/11 11:18:17 bin
drwxr-xr-x        4096 2011/09/23 19:50:20 etc
drwxr-xr-x        4096 2011/09/23 19:50:20 games
drwxr-xr-x        4096 2014/07/10 10:47:29 include
dr-xr-xr-x        4096 2014/07/10 10:47:49 lib
dr-xr-xr-x       12288 2014/07/11 11:18:17 lib64
drwxr-xr-x        4096 2014/07/10 10:50:37 libexec
drwxr-xr-x        4096 2014/07/10 10:46:05 local
dr-xr-xr-x        4096 2014/07/10 15:25:46 sbin
drwxr-xr-x        4096 2014/07/10 10:50:36 share
drwxr-xr-x        4096 2014/07/10 10:46:05 src
[root@localhost /]# ll /usr/
total 60
dr-xr-xr-x.  2 root root 12288 Jul 11 11:18 bin
drwxr-xr-x.  2 root root  4096 Sep 23  2011 etc
drwxr-xr-x.  2 root root  4096 Sep 23  2011 games
drwxr-xr-x.  3 root root  4096 Jul 10 10:47 include
dr-xr-xr-x.  9 root root  4096 Jul 10 10:47 lib
dr-xr-xr-x. 21 root root 12288 Jul 11 11:18 lib64
drwxr-xr-x.  9 root root  4096 Jul 10 10:50 libexec
drwxr-xr-x. 12 root root  4096 Jul 10 10:46 local
dr-xr-xr-x.  2 root root  4096 Jul 10 15:25 sbin
drwxr-xr-x. 55 root root  4096 Jul 10 10:50 share
drwxr-xr-x.  4 root root  4096 Jul 10 10:46 src
lrwxrwxrwx.  1 root root    10 Jul 10 10:46 tmp -> ../var/tmp
[root@localhost /]# ls -l /usr/
total 60
dr-xr-xr-x.  2 root root 12288 Jul 11 11:18 bin
drwxr-xr-x.  2 root root  4096 Sep 23  2011 etc
drwxr-xr-x.  2 root root  4096 Sep 23  2011 games
drwxr-xr-x.  3 root root  4096 Jul 10 10:47 include
dr-xr-xr-x.  9 root root  4096 Jul 10 10:47 lib
dr-xr-xr-x. 21 root root 12288 Jul 11 11:18 lib64
drwxr-xr-x.  9 root root  4096 Jul 10 10:50 libexec
drwxr-xr-x. 12 root root  4096 Jul 10 10:46 local
dr-xr-xr-x.  2 root root  4096 Jul 10 15:25 sbin
drwxr-xr-x. 55 root root  4096 Jul 10 10:50 share
drwxr-xr-x.  4 root root  4096 Jul 10 10:46 src
lrwxrwxrwx.  1 root root    10 Jul 10 10:46 tmp -> ../var/tmp
[root@localhost /]#

     另外,rsync的列表模式是支持對遠端的目錄進行查看的,而ls -l是不具備這個功能的。   


2、Shell模式

首先來看下 RSYNC 的命令語法:

rsync [OPTION]... SRC [SRC]... DEST

rsync 參數詳解:

-v, --verbose 詳細模式輸出 

-q, --quiet 精簡輸出模式 

-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗 

-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD 

-r, --recursive 對子目錄以遞歸模式處理 

-R, --relative 使用相對路徑信息               

    rsync foo/bar/foo.c remote:/tmp/

    Rsync 參數在/tmp目錄下創建foo.c文件,而如果使用-R參數:

    rsync -R foo/bar/foo.c remote:/tmp/

    Rsync 參數會創建文件/tmp/foo/bar/foo.c,也就是會保持完全路徑信息。

-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名爲~filen    ame。可以使用--suffix選項來指定不同的備份文件前綴。 

--backup-dir 將備份文件(如~filename)存放在在目錄下。 

-suffix=SUFFIX 定義備份文件前綴 

-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不    覆蓋更新的文件) 

--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結 

-l, --links 保留軟鏈結 

-L, --copy-links 想對待常規文件一樣處理軟鏈結 

--safe-links 忽略指向SRC路徑目錄樹以外的鏈結 

-H, --hard-links 保留硬鏈結 

-p, --perms 保持文件權限 

-o, --owner 保持文件屬主信息 

-g, --group 保持文件屬組信息 

-D, --devices 保持設備文件信息 

-t, --times 保持文件時間信息 

-S, --sparse 對稀疏文件進行特殊處理以節省DST的空間 

-n, --dry-run現實哪些文件將被傳輸 

-W, --whole-file 拷貝文件,不進行增量檢測 

-x, --one-file-system 不要跨越文件系統邊界 

-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節 

-e, --rsh=COMMAND 指定替代rsh的shell程序 

--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息 

-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件 

--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件 

--delete 刪除那些DST中SRC沒有的文件 

--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件 

--delete-after 傳輸結束以後再刪除 

--ignore-errors 及時出現IO錯誤也進行刪除 

--max-delete=NUM 最多刪除NUM個文件 

--partial 保留那些因故沒有完全傳輸的文件,以是加快隨後的再次傳輸 

--force 強制刪除目錄,即使不爲空 

--numeric-ids 不將數字的用戶和組ID匹配爲用戶名和組名 

--timeout=TIME IP超時時間,單位爲秒 

-I, --ignore-times 不跳過那些有同樣的時間和長度的文件 

--size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間 

--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認爲0 

-T --temp-dir=DIR 在DIR中創建臨時文件 

--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份 

-P 等同於 --partial 

--progress 顯示備份過程 

-z, --compress 對備份的文件在傳輸時進行壓縮處理 

--exclude=PATTERN 指定排除不需要傳輸的文件模式 

--include=PATTERN 指定不排除而需要傳輸的文件模式 

--exclude-from=FILE 排除FILE中指定模式的文件 

--include-from=FILE 不排除FILE指定模式匹配的文件 

--version 打印版本信息 

--address 綁定到特定的地址 

--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件 

--port=PORT 指定其他的rsync服務端口 

--blocking-io 對遠程shell使用阻塞IO 

-stats 給出某些文件的傳輸狀態 

--progress 在傳輸時現實傳輸過程 

--log-format=FORMAT 指定日誌文件格式 

--password-file=FILE 從FILE中得到密碼 

--bwlimit=KBPS 限制I/O帶寬,KBytes per second 


    需要注意的是:rsync命令在使用中,如果源參數的末尾有斜線,就會複製指定目錄內的內容,而不復制目錄本身;如果沒有斜線,則會複製目錄本身。目標參數的末尾有沒有斜線都不影響。

[root@localhost rsync]# rsync -a test1/ test2/
[root@localhost rsync]# ll test2/
-rwxrwxrwx 1 root root 0 Jul 10 15:21 123
-rwxrwxrwx 1 root root 0 Jul 10 15:20 test
[root@localhost rsync]# rsync -a test1 test2/
[root@localhost rsync]# ll test2/
total 4
drwxr-xr-x 2 root root 4096 Jul 10 15:21 test1

    

3、遠程shell模式

遠程shell模式的話,和shell模式是異曲同工。只不過,因爲是要通過遠程,因此我們需要指定遠程主機的IP,如果採用ssh我們還需要指定ssh的端口等等。

遠程shell模式,常規分爲如下兩種情況,其語法分別爲:


拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]



    下面爲大家拆解一下命令:


1)Rsync爲同步的命令
2)[OPTION]... 爲同步時的參數選項
3)[USER@]HOST... 爲Rsync同步的遠程的連接用戶和主機地址
4)SRC爲源,即需要拷貝的分區、文件或目錄等,和HOST之間用一個冒號連接
5)[DEST]爲目地分區、文件或目錄等


      大家可以發現,拉取和推送,不一樣的地方就是源和目標換了位置。其中拉取,表示從遠端主機把數據同步到執行命令的本地主機相應目錄。(需要注意,拉取的話,遠端主機上一定要安裝rsync,不然會拉取失敗)。推送,表示從本地主機執行命令把本地的數據同步到遠端主機指定目錄下

遠程模式案例:

將192.168.1.34這臺服務器的/etc 目錄備份到192.168.1.35 這臺服務器的/opt/backup 目錄下.

具體實現如下 :

在服務器192.168.1.35上執行命令:

# rsync -vzrtopg --progress -e 'ssh -p 22' [email protected]:/etc /opt/backup/
語法說明:
1)-vzrtopg 相當於上文的-avz,表示同步時文件和目錄屬性不變。
2)--progress 顯示同步的過程,可以用-p替換
3)-e ‘ssh -p 22’,表示通過ssh的通道傳輸數據。如果ssh是默認的22號端口,此處的-p 22可省略。
4) [email protected]:/etc 遠程的主機用戶,地址,路徑
5)/backup本地(192.168.1.35)的路徑

    推送實例:

 在服務器192.168.1.34上執行命令:

#rsync -avz --progress -e 'ssh -p 22' /opt/backup/ [email protected]:/opt

4、服務模式

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  # 設置可在文件傳輸前/後執行的命令。若在文件傳輸前執行的命令失敗,則取消本次傳輸操作

        下面,就配置rsync服務端跟客戶端:

        環境:   rsync_server :192.168.1.34     centos6.5

                   rsync_client:192.168.1.35       centos6.5

一.RSYNC 服務端部署:    

1、安裝rsync,並且配置服務端主配置文件

[root@localhost ~]# yum install rsync -y
[root@localhost ~]# vim /etc/rsyncd.conf
#注:yum安裝後/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 = 192.168.1.0/24
hosts deny = *
auth users = rsync
secrets file = /etc/rsync.password
[sunsky]
path = /test


2、創建 rsync.password 作爲用戶密碼文件

[root@localhost rsync]# touch /etc/rsync.password
[root@localhost rsync]# chmod 600 /etc/rsync.password 
[root@localhost rsync]# vi /etc/rsync.password 
[root@localhost rsync]# cat /etc/rsync.password 
rsync:123456

3.創建模塊中指定的文件

[root@localhost ~]# mkdir /test
[root@localhost ~]# chown root:root /test   #更改目錄的權限爲rsyncd.conf中uid和gid指定屬主和屬組

4、以守護進程方式啓動 rsync

        Rsync服務端的啓動分2種,一種是交給 xinetd 去管理,另外就是自己手動配置守護進程。

        A、手動配置rsync守護進程

    [root@localhost ~]#/usr/bin/rsync --daemon  --config=/etc/rsyncd.conf  
    #注意如果你的rsyncd.conf文件在/etc/目錄下,就不需要再用--config去指定了。--daemon是以守護進程的方式啓動

    我們可以將上面的命令寫入 /etc/rc.local 中,這樣當系統啓動時,就會自動以守護進程的方式去運行 rsync。

補充:

          重啓rsync的組合命令

[root@localhost ~]# pkill rsync  #關閉rsync服務
[root@localhost ~]# rsync --daemon #啓動rsync服務
[root@localhost ~]# ps -ef | grep rsync   #檢查是否啓動

        B、交由xinetd管理

        [root@localhost ~]# yum install xinetd  #安裝xinetd
[root@localhost ~]# vim /etc/xinetd.d/rsync  
    添加:  disable= no  
    # 默認爲yes,需要將他設置爲no,讓xinetd接管rsync服務。注意,如果你使用手動的方式,這裏就修改爲no,即拒絕xinetd接管rsync服務。
[root@localhost ~]# /etc/init.d/xinetd  start # 啓動xinetd服務,則默認會以守護進程方式啓動rsync 服務

5、檢查服務狀態

    lsof -i:873 
    或者:
    netstat -lntup |grep 873

補充:

    手動啓動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: yum install -y rsync 

    2、配置本地密碼文件:   vi /etc/rsync.password

            #添加服務端的密碼就行了

[root@localhost ~]# cat /etc/rsync.password 
123456

到此,服務端跟客戶端都配置完成!

下面進行測試 :

我們需要去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 -avzP [email protected]::sunsky /test/ --password-file=/etc/rsync.password

推送:

   rsync -avzP /test/ [email protected]::sunsky --password-file=/etc/rsync.password

第二種格式:

    拉取:

    rsync -avzP rsync//rsync@192.168.1.34:/sunsky/ /test/ --password-file=/etc/rsync.password

   rsync -avzP /test/ rsync//rsync@192.168.1.34:/sunsky/ --password-file=/etc/rsync.password

--delete的操作效果

--delete 使同步的兩個文件夾一致:

現在查看rsync 客戶端/test目錄裏的內容:

[root@localhost test]# ll /test
total 0
-rw-r--r-- 1 root root 0 Jul 14 10:41 1111
-rw-r--r-- 1 root root 0 Jul 14 11:12 123456
-rw-r--r-- 1 root root 0 Jul 14 11:12 a
-rw-r--r-- 1 root root 0 Jul 14 11:12 b
-rw-r--r-- 1 root root 0 Jul 11 17:57 dfadaf
-rw-r--r-- 1 root root 0 Jul 14 10:39 dfadafdfaf

查看rsync 服務端端/test目錄裏的內容:

[root@localhost test]# ll /test/
total 0
-rw-r--r-- 1 root root 0 Jul 14 10:41 1111
-rw-r--r-- 1 root root 0 Jul 11 17:57 dfadaf
-rw-r--r-- 1 root root 0 Jul 14 10:39 dfadafdfaf

兩個文件夾不一致.現在客戶端執行拉取命令:

[root@localhost test]# rsync -avzP --delete [email protected]::sunsky /test/ --password-file=/etc/rsync.password
receiving incremental file list
deleting b
deleting a
deleting 123456
./
sent 60 bytes  received 143 bytes  406.00 bytes/sec
total size is 0  speedup is 0.00

再看看客戶端/test目錄下的文件

[root@localhost test]# ll /test/
total 0
-rw-r--r-- 1 root root 0 Jul 14 10:41 1111
-rw-r--r-- 1 root root 0 Jul 11 17:57 dfadaf
-rw-r--r-- 1 root root 0 Jul 14 10:39 dfadafdfaf

不一致的內容已經被刪除!反之,執行推送命令將刪除服務端/test目錄中與客戶端/test目錄不一致的文件;


--exclude的操作效果

--exclude 爲排除命令,指定的文件將不會被拉取或推送;

rsync客戶端:

[root@localhost test]# tree /test
/test
├── 1111
├── 1.txt
├── a
│   └── a.txt
├── dfadaf
└── dfadafdfaf
1 directory, 5 files

rsync 服務端:

[root@localhost test]# tree /test
/test
0 directories, 0 files

以上爲操作前的環境,請保持這個環境一致,然後做如下操作:

在rsync客戶端做推送操作:

[root@localhost test]#  rsync -avz --exclude=*.txt /test/ [email protected]:/test/
[email protected]'s password: 
sending incremental file list
./
1111
dfadaf
dfadafdfaf
a/
sent 217 bytes  received 76 bytes  65.11 bytes/sec
total size is 0  speedup is 0.00

再查看服務端/test目錄

[root@localhost test]# tree /test
/test
├── 1111
├── a
├── dfadaf
└── dfadafdfaf
1 directory, 3 files

我們可以發現,只要是能被*.txt匹配到的都沒有被推送過去!

如果說,你有很多需要排除的目錄或者文件,不希望他們被同步過去,此時你可以使用--exclude-from參數,該參數後面跟一個文件,你可以將需要匹配排除的項寫到該文件裏面!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章