Linux下使用rsync 同步文件夾

jopen 10年前發布 | 79K 次閱讀 Linux

備份是系統管理中最艱巨、最容易被忽略的工作之一,同時也是最重要的工作之一。備份是防御硬件故障、非法入侵和系統安全的最大威脅——終端用戶的最后一道防線。

Rsync 是一個小巧的算法的強大實現。它最基本的功能是高效地鏡像一個文件系統的能力。使用 rsync,可以靈活地選用一組網絡協議,諸如 nfs、smb 或 ssh,方便地讓一個文件系統與另一個文件系統保持同步更新。Rsync 的第二個功能,也就是備份系統使用的功能,它可以把已經發生改變或是被刪除的文件的老的版本歸檔。

1.1  軟件簡介

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.支持匿名傳輸。

1.3  命令語法

rsync的命令格式可以為以下六種:

rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

</blockquote>

對應于以上六種命令格式,rsync有六種不同的工作模式:
1)拷貝本地文件。當SRC和DES路徑信息都不包含有單個冒號”:”分隔符時就啟動這種工作模式。
2)使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號”:”分隔符時啟動該模式。
3)使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號”:”分隔符時啟動該模式。
4)從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含”::”分隔符時啟動該模式。
5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含”::”分隔符時啟動該模式。
6)列遠程機的文件列表。這類似于rsync傳輸,不過只要在命令中省略掉本地機信息即可。

1 同步本機文件測試

rsync –help
你可以看到很多參數,選擇自己覺得需要的參數即可。

先測試一下本機同步:

rsync -vzrtopgu –progress /Data/scripts/ /tmp/back_srcipt/

</blockquote>

會看到文件在傳輸,再運行一次,就知道沒有運行復制,因為文件沒有修改過

增加文件測試:
touch /Data/scripts/test.txt

再運行上面的腳本就可以看到把這個新文件傳輸過去了,沒有復制別的文件。

3 服務器間同步文件

要在服務器間rsync傳輸文件,需要有一個是開著rsync的服務,而這一服務需要一個配置文件,說明當前運行的用戶名和用戶組,這個用戶名和用戶組講在改變文件權限和相關內容的時候有用,否則有時候會出現提示權限問題。配置文件也說明了模塊,模塊化管理服務的安全性,每個模塊的名稱都是自己定義的,可以添加用戶名密碼驗證,也可以驗證IP,設置目錄是否可寫等。

vi /etc/rsyncd.conf

uid=root
gid=root

這里指定的用戶名和用戶組是root,權限過高了,出于安全考慮可以用別的 </p>

[web_aslibra]

這里是認證的模塊名,在client端需要指定

path = /Data/webapps/www.aslibra.com/

需要做鏡像的目錄

comment = test
ignore errors

可以忽略一些無關的IO錯誤

read only = yes

只讀,如果是no,則可以從client發送文件到此服務器

list = no

不允許列文件

auth users = aslibra

認證的用戶名,如果沒有這行,則表明是匿名

secrets file = /etc/rsyncd.pass

認證文件名 </p>

[web_aslibra_public]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = yes
list = no

[web_aslibra_write]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = no
hosts allow = 192.168.1.2
list = no

</blockquote>

服務啟動方式:

/Data/apps/rsync/bin/rsync –daemon

第一個模塊,用戶驗證方式,需要指定用戶名密碼:

在/etc/下新建一文件rsyncd.pass

vi /etc/rsyncd.pass

aslibra:aslibra.com
一行一個用戶,用戶名:密碼
修改rsyncd.pass權限
chmod 600 /etc/rsyncd.pass
此步省略會導致rsync無法啟動 </p>

客戶端也需要有密碼文件,當然路徑可以不一樣

rsync -rvlHpogDtS –progress –password-file=/etc/rsyncd.pass aslibra@192.168.1.3::web_aslibra /tmp/aslibra.com/

注意:客戶端密碼文件只保存一個密碼!不要帶上用戶名,權限設置為600

第二個模塊是沒有驗證的情況,都可讀

rsync -rvlHpogDtS –progress aslibra@192.168.1.3::web_aslibra_public /tmp/aslibra.com/

第三個是驗證ip,而且可寫

發送文件很簡單,把后面兩個參數反過來就可以,拿上一個例子

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_public

這樣會提示出錯,因為web_aslibra_public是只讀的

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_write

這樣就可以了,但要看從哪個IP來的了,否則也失敗

下面是摘錄的一些詳細的參數說明:

rsyncd.conf參數
uid
該選項指定當該模塊傳輸文件時守護進程應該具有的uid,配合gid選項使用可以確定哪些可以訪問怎么樣的文件權限,默認值是”nobody”。
gid
該選項指定當該模塊傳輸文件時守護進程應該具有的gid。默認值為”nobody”。
exlude
用來指定多個由空格隔開的多個模式列表,并將其添加到exclude列表中。這等同于在客戶端命令中使用–exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用于服務器。一個模塊只能指定一個exlude選項,但是可以在模式前面使用”-”和”+”來指定是 exclude還是include。
但是需要注意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude列表,如果希望確保特定的文件不能被訪問,那就最好結合uid/gid選項一起使用。
exlude from
指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exlude列表定義。
include
用來指定多個由空格隔開的多個rsync并應該exlude的模式列表。這等同于在客戶端命令中使用–include來指定模式,結合include和 exlude可以定義復雜的exlude/include規則。一個模塊只能指定一個include選項,但是可以在模式前面使用”-”和”+”來指定是 exclude還是include。
include from
指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。
auth users
該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這里的用戶和系統用戶沒有任何關系。如果”auth users”被設置,那么客戶端發出對該模塊的連接請求以后會被rsync請求challenged進行驗證身份這里使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在”secrets file”選項指定的文件中。默認情況下無需密碼就可以連接模塊(也就是匿名方式)。
secrets file
該選項指定一個包含定義用戶名:密碼對的文件。只有在”auth users”被定義時,該文件才有作用。文件每行包含一個username:passwd對。一般來說密碼最好不要超過8個字符。沒有默認的 secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)
strict modes
該選項指定是否監測密碼文件的權限,如果該選項值為true那么密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認值為true。
hosts allow
該選項指定哪些IP的客戶允許連接該模塊。客戶模式定義可以是以下形式:
o xxx.xxx.xxx.xxx,客戶主機只有完全匹配該IP才允許訪問。例如:192.167.0.1
o a.b.c.d/n,屬于該網絡的客戶都允許連接該模塊。例如:192.168.0.0/24
o a.b.c.d/e.f.g.h,屬于該網絡的客戶都允許連接該模塊。例如:192.168.0.0/255.255.255.0
o 一個主機名,客戶主機只有擁有該主機名才允許訪問,例如:backup.linuxaid.com.cn。
o *.linuxaid.com.cn,所有屬于該域的主機都允許。
默認是允許所有主機連接。
hosts deny
指定不允許連接rsync服務器的機器,可以使用hosts allow的定義方式來進行定義。默認是沒有hosts deny定義

ignore errors
指定rsyncd在判斷是否運行傳輸時的刪除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時將將跳過–delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題。
ignore nonreadable
指定rysnc服務器完全忽略那些用戶沒有訪問權限的文件。這對于在需要備份的目錄中有些文件是不應該被備份者得到的情況是有意義的

客戶端同步命令
v, –verbose 詳細模式輸出
-q, –quiet 精簡輸出模式
-c, –checksum 打開校驗開關,強制對文件傳輸進行校驗
-a, –archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, –recursive 對子目錄以遞歸模式處理
-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,也就是會保持完全路徑信息。

-b, –backup 創建備份,也就是對于目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用–suffix選項來指定不同的備份文件前綴。
–backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, –update 僅僅進行更新,也就是跳過所有已經存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)
-l, –links 保留軟鏈結
-L, –copy-links 想對待常規文件一樣處理軟鏈結
–copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結
–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
-h, –help 顯示幫助信息

</blockquote> </div> 來自:http://www.ppkj.net/2011/12/04/linux下使用rsync-同步文件夾.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!