Linux筆記 rsync

Rsync介紹linux

1、什麼是rsyncweb

rsync是一款開源,快速,多功能的可實現增量的本地或遠程的數據鏡像同步備份的優秀工具。適用於多個平臺。從軟件名稱能夠看出來是遠程同步的意思(remote sync)。可以使本地主機不一樣分區或目錄之間及本地和遠程兩臺主機之間的數據快速同步鏡像,遠程備份等功能。算法

   在同步備份時,默認狀況下,rsync經過其獨特的「quick check」算法,僅同步大小或者最後修改時間發生變化的文件或目錄(也可根據權限,屬主等變化同步,須要制定參數)。甚至是隻同步一個文件裏變化的內容部分,因此能夠實現快速的同步數據的功能。shell

提示:傳統的cp,scp工具拷貝每次均爲完整拷貝,而rsync除了完整拷貝,還具有增量拷貝的功能,所以今後性能及效率上更勝一籌。apache

Rsync的特性以下:安全

1)支持拷貝特殊文件如連接,設備等bash

2)能夠有排除指定文件或目錄同步的功能,至關於打包命令tar服務器

3)能夠保持原來文件或目錄的權限,時間,軟硬連接等全部屬性均不改變。網絡

4)可實現增量同步,即只同步發生變化的數據,所以數據傳輸效率更高併發

5)可使用rcp,rsh,ssh等方式來配合傳輸文件,也能夠經過直接的socker連接

6)支持匿名的或認證的進程模式傳輸,方便進行數據備份及鏡像。

 

[1]核心算法介紹:

假定在名爲α和β的兩臺計算機之間同步類似的文件 A 與 B ,其中α對文件 A 擁有訪問權,β對文件 B 擁有訪問權。而且假定主機α與β之間的網絡帶寬很小。那麼 rsync 算法將經過下面的五個步驟來完成:

1. β將文件 B 分割成一組不重疊的固定大小爲 S 字節的數據塊。最後一塊可能會比 S 小。

2. β對每個分割好的數據塊執行兩種校驗:一種是 32 位的滾動弱校驗,另外一種是 128 位的 MD4 強校驗。

3. β將這些校驗結果發給α。

4. α經過搜索文件 A 的全部大小爲 S 的數據塊 ( 偏移量能夠任選,不必定非要是 S 的倍數 ) ,來尋找與文件 B 的某一塊有着相同的弱校驗碼和強校驗碼的數據塊。這項工做能夠藉助滾動校驗的特性很快完成。

5. α發給β一串指令來生成文件 A 在β上的備份。這裏的每一條指令要麼是對文件 B 經擁有某一個數據塊而不須重傳的證實,要麼是一個數據塊,這個數據塊確定是沒有與文件 B 的任何一個數據塊匹配上的。

-------------------------------------小結------------------------------------------------

rsync就是會同步咱們指定的兩端目錄之間的數據,這個數據能夠是特殊的數據。同步以前就先進行兩端的數據的比對,只會同步二者之間不一樣的部分,並保留文件本來的屬性。而且支持匿名的方式進行同步傳輸。因此rsync在備份,同步上就會較爲快速。

-----------------------------------------------------------------------------------------

2、軟件安裝

http://rsync.samba.org/   rsync的官方網站

1)編譯安裝

很簡單那就直接解壓

tar  zxf rsync-3.1.0.tar.gz 

cd rsync-3.1.0

./configure 

make 

make install 

提示:服務器和客戶端均要安裝rsync

3、服務器端rsync部署

rsync的啓動

一、 守護進程啓動rsync
[root@www rsync-2.4.6]# /usr/local/bin/rsync --daemon
便可啓動。rsync默認服務端口爲873,服務器在該端口接收客戶的匿名或者認證方式的請求。
二、開機啓動
2.1)inetd.conf
編輯/etc/services,加入行rsync 873/tcp,指定rsync的服務端口是873。編加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync --daemon

注:對於xinetd,設置方法相似。
2.2)加入rc.local
將啓動命令加入rc.local中:/usr/local/bin/rsync --daemon

 

rsync的兩種工做方式:

1) 傳輸本地文件

2)傳輸服服務端和客戶端之間的數據

 

傳輸本地文件

具體的rsync命令參數後續會講

[root@CT5_6-32-220-NFS01tmp]# rsync -avz /tmp/dir01/   /tmp/dir02/

building file list ... done

./

test01

sent 105 bytes received 48 bytes  306.00bytes/sec

total size is 0 speedup is 0.00

[root@CT5_6-32-220-NFS01 tmp]# tree

.

|-- dir01

|   `--test01

|-- dir02

|   `--test01

##能夠看到已經成功的拷貝了。而且要注意/dir01/表示目錄下的全部內容 /dir01表示的目錄自己

次例子是拷貝目錄下的內容因此要加上/dir01/若是是要將/dir01整個目錄拷貝到/dir02下,那麼就要寫/dir01  --->注意後面沒有/

[root@CT5_6-32-220-NFS01 tmp]# rsync -avz /tmp/dir01   /tmp/dir02/##這樣拷貝的是目錄自己

building file list ... done

dir01/

dir01/test01

sent 111 bytes received 48 bytes  318.00bytes/sec

total size is 0 speedup is 0.00

[root@CT5_6-32-220-NFS01 tmp]# tree

|-- dir01

|   `--test01

|-- dir02

|   |-- dir01

|   |   `-- test01

|   `--test01

 

服務端和客戶端傳輸

一、服務端配置文件

   rsync服務器的配置文件爲/etc/rsyncd.conf,其控制認證、訪問、日誌記錄等等。
該文件是由一個或多個模塊結構組成。一個模塊定義以方括弧中的模塊名開始,直到下一個模塊定義開始或者文件結束,模塊中包含格式爲name = value的參數定義。

每一個模塊其實就對應須要備份的一個目錄樹,比方說在咱們的實例環境中,有三個目錄樹須要備份:/www/、 /home/web_user1/和/home/web_user2/,那麼就須要在配置文件中定義三個模塊,分別對應三個目錄樹。配置文件是行爲單位的,也就是每一個新行都表示一個新的註釋、模塊定義或者參數賦值。以#開始的行表示註釋,以"\"結束的行表示下面一行是該行的繼續。參數賦值中等號後多是一個大小寫不敏感的字符串、一個以trure/false表示的布爾值。

參數說明:

全局參數:在文件中[modlue模塊名]以前的全部參數都是全局參數,固然也能夠在全局參數部分定義模塊參數,這時候該參數的值就是全部模塊的默認值。

    全局參數

                        描述

motd file

motd file

log file

指定rsync的日誌文件,而不將日誌發送給syslog。

pid file

指定rsync的pid文件。

syslog facility

指定rsync發送日誌消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security,  sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默認值是daemon。

模塊參數:在全局參數以後就須要定義一個或多個模塊了,模塊中能夠定義如下參數:模塊以[模塊名]開始,直到另外一個模塊的開始結束

模塊參數

描述

comment

給模塊指定一個描述,該描述連同模塊名在客戶鏈接獲得模塊列表時顯示給客戶。默認沒有描述定義。

path

指定該模塊的供備份的目錄樹路徑,該參數是必須指定的

use chroot

若是"use  chroot"指定爲true,那麼rsync在傳輸文件之前首先chroot到path參數所指定的目錄下。這樣作的緣由是實現額外的安全防禦,可是缺點是須要以roots權限,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認狀況下chroot值爲true。推薦:?

max connections

指定該模塊的最大併發鏈接數量以保護服務器,超過限制的鏈接請求將被告知隨後再試。默認值是0,也就是沒有限制。

lock file

指定支持max connections參數的鎖文件,默認值是/var/run/rsyncd.lock

read only

該選項設定是否容許客戶上載文件。若是爲true那麼任何上載請求都會失敗,若是爲false而且服務器目錄讀寫權限容許那麼上載是容許的。默認值爲true。

list

該選項設定當客戶請求可使用的模塊列表時,該模塊是否應該被列出。若是設置該選項爲false,能夠建立隱藏的模塊。默認值是true。

uid

該選項指定當該模塊傳輸文件時守護進程應該具備的uid,配合gid選項使用能夠肯定哪些能夠訪問怎麼樣的文件權限,默認值是"nobody"。

gid

該選項指定當該模塊傳輸文件時守護進程應該具備的gid。默認值爲"nobody"。

就是說當同步到這個模塊的時候,rsync守護進行要使用什麼樣的UID和GID權限來讀取本地文件。(疑問:不懂是不是這樣理解)

exlude

用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用--exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模塊只能指定一個exlude選項,可是能夠在模式前面使用"-"和"+"來指定是 exclude仍是include。

可是須要注意的一點是該選項有必定的安全性問題,客戶頗有可能繞過exlude列表,若是但願確保特定的文件不能被訪問,那就最好結合uid/gid選項一塊兒使用。

include

用來指定多個由空格隔開的多個rsync並應該exlude的模式列表。這等同於在客戶端命令中使用--include來指定模式,結合  include和 exlude能夠定義複雜的exlude/include規則。一個模塊只能指定一個include選項,可是能夠在模式前面使用"-"和"+"來指定是 exclude仍是include。

auth users

該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才容許鏈接該模塊。這裏的用戶和系統用戶沒有任何關係。若是"auth users"被設置,那麼客戶端發出對該模塊的鏈接請求之後會被rsync請求challenged進行驗證身份這裏使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認狀況下無需密碼就能夠鏈接模塊(也就是匿名方式)。

secrets file

該選項指定一個包含定義用戶名:密碼對的文件。只有在"auth  users"被定義時,該文件纔有做用。文件每行包含一個username:passwd對。通常來講密碼最好不要超過8個字符。沒有默認的 secures file名,須要限式指定一個。(例如:/etc/rsyncd.secrets)

hosts allow

該選項指定哪些IP的客戶容許鏈接該模塊。客戶模式定義能夠是如下形式:
 192.168.1.1 指定只有某個IP地址

192.168.1.0/24  指定某個網絡的客戶端

Backup.linux.com  指定某個主機名才能訪問
默認是容許全部主機鏈接。

hosts deny

指定不容許鏈接rsync服務器的機器,可使用hosts  allow的定義方式來進行定義。默認是沒有hosts  deny定義

ignore errors

指定rsyncd在判斷是否運行傳輸時的刪除操做時忽略server上的IP錯誤,通常來講rsync在出現IO錯誤時將將跳過--delete操做,以防止由於暫時的資源不足或其它IO錯誤致使的嚴重問題。

ignore nonreadable

指定rysnc服務器徹底忽略那些用戶沒有訪問權限的文件。這對於在須要備份的目錄中有些文件是不該該被備份者獲得的狀況是有意義的。

transfer logging

使rsync服務器使用ftp格式的文件來記錄下載和上載操做在本身單獨的日誌中。

log format

經過該選項用戶在使用transfer logging能夠本身定製日誌文件的字段。其格式是一個包含格式定義符的字符串,可使用的格式定義符以下所示:

默認log格式爲:"%o %h [%a]  %m (%u) %f %l",通常來講,在每行的頭上會添加"%t [%p] "。在源代碼中同時發佈有一個叫rsyncstats的perl腳本程序來統計這種格式的日誌文件。

%h 遠程主機名%a 遠程IP地址%m 模塊名%t 當前時間%f 文件名

%l 文件長度字符數

timeout

經過該選項能夠覆蓋客戶指定的IP超時時間。經過該選項能夠確保rsync服務器不會永遠等待一個崩潰的客戶。超時單位爲秒鐘,0表示沒有超時定義,這也是默認值。對於匿名rsync服務器來講,一個理想的數字是600。

dont compress

用來指定那些不進行壓縮處理再傳輸的文件,默認值是
 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2  *.tbz

由於這些文件已經通過壓縮咯,默認不用修改。


服務器配置實例分析
有兩臺服務器:A和B。其中A是主web服務器,具備域名www.atong.com(192.168.1.1),B服務器是備份機,其域名爲back.atong.com(192.168.1.2)。其中A的web內容存放在如下幾個地方: /www/和 /home/web_user1/和/home/web_user2/。咱們須要在備份機B上創建對這幾個目錄內容的備份。

#vi /etc/rsyncd.conf 編輯服務端的配置文件。

#配置文件內容

uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[www]
path = /www/
ignore errors
read only = true
list = false
hosts allow = 192.168.1.2
hosts deny = 0.0.0.0/32    #拒絕任何主機,只有hosts allow的主機
auth users = rsync
secrets file = /etc/rsync.pas


[web_user1]
path = /home/web_user1/
ignore errors
read only = true            #客戶端不能上傳資料
list = false
hosts allow = 192.168.1.2
hosts deny = 0.0.0.0/32
uid = web_user1             #同步次模塊時,shi是用web_user1這個用戶來讀取path下的文件。
gid = web_user1
auth users = rsync
secrets file = /etc/rsync.pas


[web_user2]
path = /home/web_user2/
ignore errors
read only = true
list = false
hosts allow = 192.168.1.2
hosts deny = 0.0.0.0/32
uid = web_user2
gid = web_user2
auth users = rsync
secrets file = /etc/rsync.pas

這裏定義有三個模塊,分別對應於三個須要備份的目錄樹。這裏只容許192.168.1.2備份本機的數據,而且須要認證。三個模塊受權的備份用戶都爲rsync,而且用戶信息保存在文件/etc/rsync.pas中,其內容以下:rsync:123456

而且該文件只能是root用戶可讀寫的,不然rsyncd啓動時會出錯。這些文件配置完畢之後,就須要在A服務器上啓動rsyncd服務器:/usr/bin/rsync --daemon

注意: 密碼文件的權限設置爲600

 

客戶端操做

在對rsync服務器配置結束之後,下一步就須要在客戶端發出rsync命令來實現將服務器端的文件備份到客戶端來。rsync是一個功能很是強大的工具,其命令也有不少功能特點選項,咱們下面就對它的選項一一進行分析說明。首先,rsync的命令格式能夠爲:
1)rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST   推送(由於SRC是本地)
2)rsync [OPTION]... [USER@]HOST:SRC DEST            拉取 (由於SRC是服務端)
3)rsync [OPTION]... SRC [SRC]... DEST      拷貝本地文件
4)rsync [OPTION]... [USER@]HOST::SRC [DEST]
5)rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6)rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC[DEST]

SRC:標示源文件(從哪來拷)   DES:目標文件(拷到哪裏)
rsync命令有六種格式:

第1個命令格式:是將本地的內容推送到服務器端。實例:rsync  /tmp   rsync@192.168.1.1:www 

第2個命令格式:是將服務器的內容拉取到本地端。實例:rsync rsync@192.168.1.1:www    /tmp

[對照一下上面的命令格式,通常是有USER@HOST:就表示是服務器端,而沒有知識SRC或DEST就表示是客戶端。怎麼分清楚是拉取仍是推送,要看服務端是SRC仍是DEST,若是是SRC就表示從服務端拷,就是拉取格式如USER@HOST:SRC。若是是DEST(拷到哪裏)就表示推送,拷到服務端USER@HOST:DEST]

第4個和第5個命令同第一、2之間的區別就在於服務端(USER@HSOT)後面是跟上一個: 仍是兩個::1g個:表示會在服務器端啓用以個shell來執行這個命令。而::表示會以deamon模式來執行。

 

 

rsync命令同步參數:

先了解下rsync的同步參數選項,先經過本地同步的方式來驗證rsync的同步參數。

-v      :詳細模式輸出,傳輸時的進度等信息

-z      :傳輸時進行壓縮以提升效率—compress-level=num可按級別壓縮

-r      :對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸。

-t      :保持文件的時間信息—time

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

-p      :保持文件權限

-g      :保持文件的屬組信息

-P      :--progress 顯示同步的過程及傳輸時的進度等信息

-a      :歸檔模式,表示以地櫃模式傳輸文件,並保持文件全部屬性至關於-rtopgdl

-e      :使用的信道協議,指定替代rsh的shell程序。例如:ssh

-D      :保持設備文件信息

-l      :--links 保留軟鏈接

--progress  :顯示備份過程

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

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

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

-b, --backup 建立備份,也就是對於目的已經存在有一樣的文件名時,將老的文件從新命名爲~filename。

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

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

-R, --relative 使用相對路徑信息  如:rsync foo/bar/foo.c remote:/tmp/   則在/tmp目錄下建立foo.c文件,而若是使用-R參數:rsync -R foo/bar/foo.c remote:/tmp/     則會建立文件/tmp/foo/bar/foo.c,也就是會保持徹底路徑信息。

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

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

通常就使用  -avz來進行傳輸,若是放入腳本中能夠吧-v和-P去掉。

客戶端命令格式實例:

1.2 從服務器上下載文件

rsync -avz  --delete  rsycn@192.168.1.1::/tmp  /tmp --password-file=/etc/rsync.pas

從本地上傳到服務器上去

rsync -avz --delete --progress   /tmp rsync@192.168.1.1::/tmp

 

參考實例1:

 

具體需求:在A-SERVER上以rsync守護進程的方式部署rsync服務,使得全部客戶端主機,能夠把本地的數據經過rsync的方式據備份到服務器A-SERVER上。也能夠經過rsync將數據從A-SERVER抓取到客戶端。

拓撲方向:C<---->A  A<--->B

服務器端

1)配置/etc/rsyncd.conf

Rsyncd.conf 默認是rsync服務的配置文件

uid = root     #此表示rsync以什麼用戶來讀取本地的目。也就是以root用戶來進行rsync指定目錄的文件讀取,寫入權限。

gid = root

use chroot = no

max connections = 200  #最大鏈接數

timeout = 300

pid file = /var/run/rsyncd.pid

locak file =  /var/run/rsync.lock

log file =  /var/log/rsyncd.log  #日誌文件

[atong]    #當咱們讀取的時候,就須要使用到模塊名

Path =  /tmp/    #指定備份的路徑

Ignore  errors      #忽略錯誤

read  only = false   #不僅讀

list = false         #不列出rsync目錄文件

hosts  allow = 10.0.0.0/24

hosts  deny = 0.0.0.0/32

auth users = rsync_backup

secrets  file = /etc/rsync.password   #認證的密鑰文件

man  rsyncd.conf查看配置的細節信息

注意:配置的path必定要存在,而且權限是容許uid和gid去進行讀寫才能夠。有點相似nfs的本地文件權限,和nfs共享權限同樣。

2)配置密碼文件:文件格式爲用戶:密碼而且裏面的只能以這樣的格式,而且是沒有空格的。並且在配置文件中的log file 指定的存放路徑,就是此密碼文件的存放路徑,且文件名要正確。密碼文件的權限必須是600的權限,root root

3)啓動rsync

#rsync –-daemon 表示讓rsync以daemon的模式進行啓動

#ps -ef | grep rsync  查看rsync進程是否已經啓動

#netstat –lnt | grep 873   查看rsync是否已經啓動,並檢測端口狀態

#lsof –I tcp:873  用來反查端口對應的是什麼服務。

拓展:--daemon 表示以守護進程的方式啓動

--address 綁定某個ip地址來提供服務,若是有多個ip地址的話

--config=file  更還配置文件路徑,而不是默認的/etc/rsyncd.conf

--port=PORT 更改其餘端口提供服務器,而不是默認的873端口

以上的幾個參數爲了解內容,生產環境並不長經常使用

配置rsync開機啓動

echo 「/usr/bin/rsync --daemon」>>/etc/rc.local

重啓rsync服務pkill rsync&&rsync -daemon

 

客戶端部署

1)在一樣的密碼文件下添加用戶的密碼  600權限(文件不必定要和服務端的同樣,但爲了方便管理,建議同樣的)

推送#rsync –avz –P  /tmp/atong rsync_back@192.168.1.1::atong

最後面的::表示是以daemon模式,而且是oldboy模塊。此模塊的名稱必須和配置文件中的同樣。

#rsync–avz –P  /tmp/atong  rsync://rsync_back@192.168.1.1:/atong/ hosts

--password-file=/etc/rsync.password

此方式的推送,最後面的/atong/跟的並非模塊名稱,而是直接接上目錄路徑。[此目錄是否是隻可以接上,服務器上配置的同步目錄]

實例:

[root@CT5_6-32-220-NFS01 data]# cat/etc/rsyncd.conf   

uid = root

gid = root

user chroot = no

max connections =200

timeout = 300

pid file =/var/run/rsyncd.pid

locake file =/var/run/rsync.lock

log file = /var/log/rsyncd.log

[tmp]

path=/tmp/

ignore errors 

read only = false

list = false

hosts allow = 192.168.40.0/22

hsots deny=0.0.0.0/32

authusers = rsync_back

secretsfile= /etc/rsync.password

[/data/rsync/]

path=/data/rsync/

read only = false

auth users = rsync_back

secrets file = /etc/rsync.password

###

root@CT5_6-32-220-NFS01 tmp]# mkdir /data   ##建立模塊中使用到的目錄

mkdir: cannot create directory `/data': File exists

[root@CT5_6-32-220-NFS01 tmp]# cd /data

[root@CT5_6-32-220-NFS01 data]# echo"rsync_back:123456" >> /etc/rsync.password

[root@CT5_6-32-220-NFS01 data]# chmod 600  /etc/rsync.password##注意密碼文件的權限爲600權限。

[root@CT5_6-32-220-NFS01 data]# rsync –daemon  啓動

[root@CT5_6-32-220-NFS01 data]# netstat -lnt | grep873  ##查看系統中是否已經啓動rsync

tcp       0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN  

###配置客戶端:客戶端中只須要存放用戶的密碼,而且權限爲600便可###

[root@CT56-32-221-NFS02 dir01]# echo  "123456" >>/etc/rsync.password

[root@CT56-32-221-NFS02 dir01]# chmod 600/etc/rsync.password

第一種拉取方式:

[root@CT56-32-221-NFS02 tmp]# rsync -avz   rsync_back@192.168.41.220::tmp /tmp/  ##其中

[root@CT56-32-221-NFS02 tmp]# ll

total 20

drwxr-xr-x 84 root root 4096 Jun 20 10:28 2

drwxr-xr-x  3root root 4096 Jun 20 10:19 dir01

drwxr-xr-x  3root root 4096 Jun 20 09:43 dir02

drwxr-xr-x 84 root root 4096 Jun 19 05:25 etc

drwx------  2root root 4096 Jun 20 07:40 ssh-ZQBmZ29557

說明:若是是加上-delete進行推送,那麼我指定的本地目錄的內容有哪些,遠端目錄的內容也就只有哪些。如我本來指定/tmp/atong/ 和遠端/atong/同樣。後來又再建立了一個/delete目錄且爲空,那麼我再推送/tmp/delete/和遠端/atong/目錄,那麼遠端原來有的全部內容都會被刪除掉,由於此時的/delete/目錄有啥,遠端也就有啥。

 

一些示例腳本
這裏這些腳本都是rsync網站上的例子:


一、每隔七天將數據往中心服務器作增量備份

#!/bin/sh
# This script does personal backups to a rsyncbackup server. You will end up
# with a 7 day rotating incremental backup. Theincrementals will go
# into subdirectories named after the day of theweek, and the current
# full backup goes into a directory called"current"
# tridge@linuxcare.com

# directory to backup
BDIR=/home/$USER

# excludes file - this contains a wildcard patternper line of files to exclude
EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=owl

# your password on the backup server
export RSYNC_PASSWORD=XXXXXX


########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors--delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incrementaldirectory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/$BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
二、備份至一個空閒的硬盤
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache/data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
三、對vger.rutgers.edu的cvs樹進行鏡像
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog$HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs//var/www/cvs/vger/
exit 0
FAQ
Q:如何經過ssh進行rsync,並且無須輸入密碼?
A:能夠經過如下幾個步驟
1. 經過ssh-keygen在server A上創建SSH keys,不要指定密碼,你會在~/.ssh下看到identity和identity.pub文件
2. 在server B上的home目錄創建子目錄.ssh
3. 將A的identity.pub拷貝到server B上
4. 將identity.pub加到~[user b]/.ssh/authorized_keys
5. 因而server A上的A用戶,可經過下面命令以用戶B ssh到server B上了
e.g. ssh -l userB serverB
這樣就使server A上的用戶A就能夠ssh以用戶B的身份無需密碼登錄到serverB上了。
Q:如何經過在不危害安全的狀況下經過防火牆使用rsync?
A:解答以下:
這一般有兩種狀況,一種是服務器在防火牆內,一種是服務器在防火牆外。不管哪一種狀況,一般仍是使用ssh,這時最好新建一個備份用戶,而且配置 sshd僅容許這個用戶經過RSA認證方式進入。若是服務器在防火牆內,則最好限定客戶端的IP地址,拒絕其它全部鏈接。若是客戶機在防火牆內,則能夠簡單容許防火牆打開TCP端口22的ssh外發鏈接就ok了。
Q:我能將更改過或者刪除的文件也備份上來嗎?
A:固然能夠:
你可使用如:rsync -other -options-backupdir = ./backup-2000-2-13 ...這樣的命令來實現。
這樣若是源文件:/path/to/some/file.c改變了,那麼舊的文件就會被移到./backup-2000-2-13/path/to/some/file.c,
這裏這個目錄須要本身手工創建起來
Q:我須要在防火牆上開放哪些端口以適應rsync?
A:視狀況而定
rsync能夠直接經過873端口的tcp鏈接傳文件,也能夠經過22端口的ssh來進行文件傳遞,但你也能夠經過下列命令改變它的端口:
rsync --port 8730 otherhost::
或者
rsync -e 'ssh -p 2002' otherhost:
Q:我如何經過rsync只複製目錄結構,忽略掉文件呢?
A:rsync -av --include '*/' --exclude '*' source-dir dest-dir
Q:爲何我總會出現"Read-only file system"的錯誤呢?
A:看看是否忘了設"read only = no"了
Q:爲何我會出現'@ERROR: invalid gid'的錯誤呢?
A:rsync使用時默認是用uid=nobody;gid=nobody來運行的,若是你的系統不存在nobody組的話,就會出現這樣的錯誤,能夠試試gid = nogroup或者其它
Q:綁定端口873失敗是怎麼回事?
A:若是你不是以root權限運行這一守護進程的話,由於1024端口如下是特權端口,會出現這樣的錯誤。你能夠用--port參數來改變。
Q:爲何我認證失敗?
A:從你的命令行看來:
你用的是:
>; bash$ rsync -a 144.16.251.213::test test
>; Password:
>; @ERROR: auth failed on module test
>;
>; I dont understand this. Can somebody explainas to how to acomplish this.
>; All suggestions are welcome.
應該是沒有以你的用戶名登錄致使的問題,試試rsync -amax@144.16.251.213::test test

 
 
 
 
 
 
補充:rsync實戰:https://blog.csdn.net/qq_41816540/article/details/80611757
相關文章
相關標籤/搜索