天天看點

CentOS6.5下使用rsync增量同步備份檔案

[b][size=large]rsync是linux下一款檔案同步工具,介紹如下:

Rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案。Rsync本來是用以取代rcp的一個工具,它目前由 rsync.samba.org維護。Rsync使用所謂的“Rsync演算法”來使本地和遠端兩個主機之間的檔案達到同步,這個算法隻傳送兩個檔案的不同部分,而不是每次都整份傳送,是以速度相當快。運作Rsync server的機器也叫backup server,一個Rsync server可同時備份多個client的資料;也可以多個Rsync server備份一個client的資料。

  Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server會打開一個873的服務通道(port),等待對方Rsync連接配接。連接配接時,Rsync server會檢查密碼是否相符,若通過密碼查核,則可以開始進行檔案傳輸。第一次連通完成時,會把整份檔案傳輸一次,下一次就隻傳送二個檔案之間不同的部份。

  Rsync支援大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在windows平台下也有相應的版本,比較知名的有cwRsync和Sync2NAS。

  Rsync的基本特點如下:

1.可以鏡像儲存整個目錄樹和檔案系統;

2.可以很容易做到保持原來檔案的權限、時間、軟硬連結等;

3.無須特殊權限即可安裝;

4.優化的流程,檔案傳輸效率高;

5.可以使用rcp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連接配接;

6.支援匿名傳輸。

[/size][/b]

[b][color=olive][size=large]在linux上,如果我們想要遠端拷貝檔案,我麼可以使用scp指令,scp也是一個非常簡單輕巧的指令,那麼今天又與散仙所說rsync有什麼差別呢?

其實主要的差別在文章标題上就展現出來了,rsync的同步僅僅對增量的檔案會實作拷貝備份,不會對已有的沒有改變的檔案做備份,什麼意思呢?

散仙舉例子如下:

A伺服器上,有個a檔案夾裡面有個a.txt檔案,第一次我們在B伺服器上對A伺服器上的a檔案夾執行備份,那麼會把a.txt檔案拷貝到B伺服器上的某個檔案夾下,現在我們把A伺服器上的a檔案夾下新增一個b.txt,再次執行同步,就會發現這次僅僅同步了b檔案,原來的a檔案沒有變化,如果我們改變了A服務上的a或b檔案的内容,那麼再次同步時,就會把發生的改變的檔案,也給同步過來,這就是與scp最大的不同,因為scp沒有這個功能。

如果沒有rsync元件,可以先執行yum install rsync指令進行安裝,散仙所用的rsync指令,無須配置任何conf檔案,隻需要用指令行就可以了,非常簡潔。

測試機器IP如下:

[table]

|序号|IP位址|簡稱|

|1|192.168.46.32|A機器

|2|192.168.46.11|B機器

[/table]

先看下A機器上,logs檔案夾下的檔案:

[/size][/color][/b]

[code="java"]# ll

總用量 4

-rw-r--r-- 1 root root 3 8月 30 02:29 a.txt

#

[/code]

[b][color=green][size=large]然後,我們在B機器上,執行同步指令如下:[/size][/color][/b]

[code="java"]# ll

總用量 0

# rsync -av --delete 192.168.46.32:/root/logs /root/logg/

receiving incremental file list

logs/

logs/a.txt

sent 34 bytes received 107 bytes 282.00 bytes/sec

total size is 3 speedup is 0.02

# ll

總用量 4

-rw-r--r-- 1 root root 3 8月 30 02:29 a.txt

# [/code]

[b][color=green][size=large]然後,我們在A機器上的log檔案下,新增一個b.txt,再測試同步指令:[/size][/color][/b]

[code="java"]# rsync -av --delete 192.168.46.32:/root/logs /root/logg/

receiving incremental file list

logs/

logs/b.txt

sent 34 bytes received 125 bytes 318.00 bytes/sec

total size is 5 speedup is 0.03

#

[/code]

[b][color=green][size=large]通過日志,我們發現如果新增一個使用rsync僅僅同步了新增的檔案:[/size][/color][/b]

[b][color=green][size=large]現在我們在A伺服器上的log檔案夾下的a.txt裡面新增一行内容,再次執行同步指令:[/size][/color][/b]

[code="java"]# rsync -av --delete 192.168.46.32:/root/logs /root/logg/

receiving incremental file list

logs/a.txt

sent 37 bytes received 128 bytes 330.00 bytes/sec

total size is 9 speedup is 0.05

#

[/code]

[b][color=green][size=large]我們發現rsync指令也能很好的識别出來[/size][/color][/b]

[b][color=green][size=large]最後我們在來看下,同時改動,A伺服器上的a和

b檔案,一個新增一行,一個删除一行,來測下增量:[/size][/color][/b]

[code="java"]# rsync -av --delete 192.168.46.32:/root/logs /root/logg/

receiving incremental file list

logs/

logs/a.txt

logs/b.txt

sent 65 bytes received 174 bytes 478.00 bytes/sec

total size is 10 speedup is 0.04

#

[/code]

[b][color=green][size=large]我們發現rsync也能很好的識别出來。[/size][/color][/b]

[b][color=green][size=large]最後,我們在來看下,如何在B伺服器上向A伺服器上發送資料,注意,散仙剛在上面的示範,是從B伺服器上下載下傳A伺服器上的資料,現在我們要示範的是如何在B服務上主動發送資料到A伺服器上,原理一樣,都是以增量的方式的操作的,隻不過寫IP的方式,變換了一下位置:[/size][/color][/b]

[code="java"]# rsync -av --delete /root/logg/logs/b.txt 192.168.46.32:/root/

sending incremental file list

b.txt

sent 87 bytes received 37 bytes 248.00 bytes/sec

total size is 10 speedup is 0.08

# [/code]