RHCE系列之備份工具—-鏡像備份Rsync

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1431426

    我一哥們最近在搞備份,需要用到rsync。因此,鄙人就簡單總結了下rsync,也就有了這篇博文,希望對51的博友們有所幫助!



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 守護進程在一臺機器上永久運行,接收文件傳輸請求??梢园盐募l送給守護進程,也可以向它請求文件。服務器模式非常適合創建中心備份服務器或項目存儲庫。


      以上是對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

  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 常用的參數選項有如下:

       更多的詳細信息,請通過man rsync來進行查看。
    

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

-n : 如果擔心命令執行不正確,一同步復制,可能這個復制的后果是致命的,那后果可就嚴重了,這里我們可以加-n先測試一下    
-v :  --verbose,詳細輸出模式,顯示詳細過程    
-q : --quiet,靜默模式,盡可能輸出少的信息    
-c : --checksum,可以對傳輸的文件進行較驗的,強制對文件傳輸進行校驗    
-r  : --recursive,遞歸復制    
-p : --perms,保存文件的權限    
-t  : --times,保留文件的時間戳    
-l  : --links,保留文件的符號鏈接    
-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 : 顯示如何執行壓縮和傳輸的,也就是顯示傳輸狀態的
--

    接下來,請看下面兩個例子: 

[root@rsync-server /]# rsync -a /rsync /backup  #會把目錄rsync直接同步至/backup目錄中去
[root@rsync-server /]# rsync -a /rsync/ /backup #會把目錄中的data/中的內容同步至/backups目錄中

現在,我們在shell模式下,進行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

實例1:測試本地rsync同步上面的例子,演示了將本地/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為同步的命令
2)[OPTION]... 為同步時的參數選項
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’ root@172.16.100.1:/etc /backup

語法說明:

1)-vzrtopg 相當于上文的-avz,表示同步時文件和目錄屬性不變。
2)--progress 顯示同步的過程,可以用-p替換
3)-e ‘ssh -p 22’,表示通過ssh的通道傳輸數據。如果ssh是默認的22號端口,此處的-p 22可省略。
4)root@192.168.1.111:/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 root@172.16.100.1:/data/web/html

特別說明:

1)上面兩個例子中的數據同步都是加密傳輸的,因為是通過ssh通道進行數據傳輸的。2)在傳輸前需要進行連接用戶(一般為系統用戶)密碼驗證,需要手工輸入。這里我們可以通過配置ssh互信來實現免驗證方式同步。3)rsync軟件必須安裝在本地及遠程服務器上

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的客戶端!

環境
CentOS6.5 x86_64位 采用最小化安裝,系統經過了基本優化
selinux為關閉狀態,iptables為無限制模式
源碼包存放位置:/root
服務器架構:
rsync-server:172.16.100.1
rsync-client:172.16.100.2

RSYNC 服務端部署: 

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

[root@rsync-server ~]# yum install rsync -y
[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

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

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

補充:

          重啟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

ot@rsync-server ~]# yum install rsync -y

2、配置本地密碼文件 

[ro[root@rsync-server ~]# vim /etc/rsync.password   # 該文件里面僅存放密碼即可
   redhat
[root@rsync-server ~]# cat /etc/rsync.password   # 配置完畢之后檢查
[root@rsync-server ~]# ll /etc/rsync.password    # 配置完畢之后檢查

OK?。。?/span>

RSYNC的服務端和客戶端都配置完畢,現在我們可以進行測試了。

我們需要去rsync客戶端,來完成下面的測試操作。需要注意,測試同樣分為兩種情況,每種情況又有兩種語法寫法,分別為:

拉?。孩賠sync [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

 

下面列舉我們在rsync客戶端上,對rsync服務端進行拉取或推送的操作范例:

第一種格式:

拉?。?/p>

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

推送:

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

    拉?。?/p>

rsync -avzP rsync://rsync_backup@172.16.100.1:/sunsky/ /test/ --password-file=/etc/rsync.password
rsync -avzP /test/ rsync://resync_backup@192.168.1.111:/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 rsync_nobody@172.16.100.1::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 rsync_nobody@172.16.100.1::webdata /data/web/  --password-file=/etc/rsyncd.passwd > /dev/null 2>&1

 

但是,我們仍然會發現一個問題,雖然使用計劃認為能滿足我們的日志歸檔定時推送到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 rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.passwordreceiving incremental file listdeleting ddeleting cdeleting bdeleting a./e           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)  sent 86 bytes  received 143 bytes  458.00 bytes/sectotal size is 0  speedup is 0.00[root@rsync-client ~]# ls /test/e [root@rsync-server ~]# ls /test/e

 我們發現,rsync客戶端本身的a,b,c,d文件都消失了,取而代之的是e文件,并且我們在rsync的拉取過程中,也能看到刪除操作!

在rsync客戶端做推送操作:

[root@rsync-client ~]# rsync -avzP --delete /test/ rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.passwordsending incremental file list./deleting ea           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/sectotal size is 0  speedup is 0.00[root@rsync-client ~]# ls /test/a  b  c  d[root@rsync-server ~]# ls /test/a  b  c  d

我們發現,rsync服務端本身的e文件消失了,取而代之的是a,b,c,d文件,并且我們在rsync的推送過程中,也能看到刪除操作!



–exclude操作如下:

[root@rsync-server ~]# tree /test//test/0 directories, 0 files[root@rsync-client ~]# tree /test//test/├── a├── b├── c.txt├── x│   └── xxx.txt└── x.txt2 directories, 4 files

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

在rsync客戶端做推送操作:

[root@rsync-client ~]# rsync -avz --exclude=*.txt /test/ root@172.16.100.1:/test/root@172.16.100.1's password: sending incremental file list./abx/sent 154 bytes  received 57 bytes  60.29 bytes/sectotal size is 0  speedup is 0.00

在rsync服務端進行查看同步效果:

[root@rsync-server ~]# tree /test//test/├── a├── b└── x1 directory, 2 files

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

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

例子:

在rsync客戶端做推送操作:

[root@rsync-client ~]# cat /tmp/exclude 
x
*.txt
[root@rsync-client ~]# rsync -avz --exclude-from=/tmp/exclude /test/ root@172.16.100.1:/test/
root@172.16.100.1's password: 
sending incremental file list
./
a
b
xx/
sent 151 bytes  received 57 bytes  59.43 bytes/sec
total size is 0  speedup is 0.00

在rsync服務端進行查看同步效果:

[root@rsync-server ~]# tree /test/
/test/
├── a
├── b
└── xx
1 directory, 2 files

以上就是我們的–exclude和–exclude-from的詳細用法!

轉自:http://nolinux.blog.51cto.com/4824967/1431426

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1995

(0)
s19930811s19930811
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • 為什么中國的網頁設計那么爛?

    Nick Johnson,一個有12年經驗的Web設計師在它的blog里寫下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,騰訊榜上有名。其中的觀點相當的好,希望所有的中國人都讀一下。我不全文翻譯了,只是給大家看一些摘要。(保證不會像《環球時報》一樣) —————————— 作者2005年的夏天來到中國,他…

    Linux干貨 2016-07-11
  • 倒排索引-搜索引擎的基石

    1.概述       在關系數據庫系統里,索引是檢索數據最有效率的方式,。但對于搜索引起,他它并不能滿足其特殊要求:       1)海量數據:搜索引擎面對的是海量數據,像Google,百度這樣大型的商業搜索引擎索引都是億級甚至幾千的網頁數量 ,面對…

    Linux干貨 2015-12-10
  • 網絡基礎筆記

    網絡管理筆記 1. 網絡概念:     一組網絡設備或計算機,通過無形的規則鏈接起來的體系!    2. 應用程序種類:     (1)批處理應用程序:            FTP、TFTP、庫存更新    &nbsp…

    Linux干貨 2017-03-16
  • lvm簡要及基本操作

        LVM( Logical Volume Manage,邏輯 邏輯卷管理)LVM將一個或多個硬盤的分區在邏輯上集合,相當于一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對于普通的磁盤分區有很大的靈活性。  &nbs…

    Linux干貨 2016-05-23
  • 計算機起源與Linux簡述

    什么是計算機?  計算機(computer)俗稱電腦,是一種用于高速計算的電子計算機器,可以進行數值計算,又可以進行邏輯計算,還具有存儲記憶功能。是能夠按照程序運行,自動、高速處理海量數據的現代化智能電子設備。 它由硬件系統和軟件系統組成,沒有安裝任何軟件的計算機被稱為裸機。硬件系統由運算器,控制器,存儲器,輸入設備,輸出設備幾部分組成;…

    Linux干貨 2017-03-29
  • vim的總結、練習和周期性任務

    vim:VI的增強版,是一款可視化功能非常強大的文本編輯器,屬于全屏編輯器。 vim:使用方法: 命令格式:    ~]#vim [options] [file ..]      選項:        +#:打開文件后,直接讓光標處于第#行首;   …

    Linux干貨 2017-08-14
欧美性久久久久