爛泥:linux文件同步之rsync學習(一)


本文由秀依林楓提供友情贊助,首發於爛泥行天下

這幾天剛好有空就打算開始學習linux下的文件同步軟件rsync,在學習rsync時,我們可以分以下幾個步驟進行:

1、 rsync是什么

2、 rsync的工作原理

3、 rsync優點

4、 rsync認證方式

5、 安裝rsync

6、 rsync命令參數詳解

7、 配置rsync

8、 rsync的啟動與關閉

9、 rsync同步實例

說明:rsync服務器與客戶端使用的OS均為:centos 6.5 64bit。

clip_image001

一、rsync是什么

在開始正式學習rsync之前,我們先來回答這個問題:rsync是什么。

rsync(remote synchronize)是Liunx/Unix下的一個遠程數據同步工具。它可通過LAN/WAN快速同步多台主機間的文件和目錄,並適當利用rsync算法(差分編碼)以減少數據的傳輸。

rsync算法並不是每一次都整份傳輸,而是只傳輸兩個文件的不同部分,因此其傳輸速度相當快。

除此之外,rsync可拷貝、顯示目錄屬性,以及拷貝文件,並可選擇性的壓縮以及遞歸拷貝。

二、rsync的工作原理

1、客戶端構造FileList,FileList包含了需要與服務器同步的所有文件信息對name->id(id用來唯一表示文件例如MD5)。

2、客戶端將FileList發送到服務器。

3、服務器上rsync處理客戶端發過來的FileList,構建新的NewFileList。其中根據MD5值比較,刪除服務器上已經存在的文件信息對,只保留服務器上不存在或變化的文件。

4、客戶端得到服務器發送過來的NewFileList,然后把NewFileList中的文件重新傳輸到服務器。

三、rsync優點

rsync有以下幾個優點:

1)可以鏡像保存整個目錄樹和文件系統。

2)可以很容易做到保持原來文件的權限、時間、軟硬連接等。

3)無需特殊權限即可安裝。

4)擁有優化的流程和比較高的文件傳輸效率。

5)可以使用shell(rsh、ssh)方式來傳輸文件。

6)支持匿名運行。

7)與scp相比,rsync傳輸速度絕對遠遠超過scp的傳輸速度。

我們在局域網中經常用rsync和scp傳輸大量mysql數據庫文件,發現rsync傳輸文件速度至少要比scp快20倍以上。

所以如果需要在Liunx/Unix服務器之間互傳海量數據時,建議選擇rsync進行傳輸。

四、rsync認證方式

rsync有兩種常用的認證方式,一種是rsync-daemon方式,另外一種是ssh方式。在平時使用過程,我們使用最多的是rsync-daemon方式。

注意:在使用rsync時,服務器和客戶端都必須安裝rsync程序

4.1 rsync-daemon認證

rsync在rsync-daemon認證方式下,默認監聽TCP的873端口。

rsync-daemon認證方式是rsync的主要認證方式,這個也是我們經常使用的認證方式。並且也只有在此種模式下,rsync才可以把密碼寫入到一個文件中。

注意:rsync-daemon認證方式,需要服務器和客戶端都安裝rsync服務,並且只需要rsync服務器端啟動rsync,同時配置rsync配置文件。客戶端啟動不啟動rsync服務,都不影響同步的正常進行。

4.2 ssh認證

rsync在ssh認證方式下,可通過系統用戶進行認證,即在rsync上通過ssh隧道進行傳輸,類似於scp工具。此時同步操作不在局限於rsync中定義的同步文件夾。

注意:ssh認證方式,不需要服務器和客戶端配置rsync配置文件,只需要雙方都安裝rsync服務,並且也不需要雙方啟動rsync。

若rsync服務端SSH為標准端口,此時rsync使用方式如下:

rsync -avz /root/test root@192.168.199.248:/root/

clip_image002

若rsync服務端SSH為非標准端口,可通過rsync的-e參數進行端口指定。使用方式如下:

rsync -avz /root/test -e 'ssh -p1234' root@192.168.199.248:/root/

clip_image003

五、安裝rsync

安裝rsync,我們可以分為兩種方式:源碼方式安裝和RPM方式安裝。

注意:rsync軟件無論是服務器端還是客戶端都是同一個軟件包。

下面我們就一一講解,這兩種方式的安裝方法。

5.1 源碼方式安裝

源碼方式安裝rsync,我們需要到其官網下載對應的安裝包。rsync官網:rsync.samba.org。如下:

clip_image004

clip_image005

我們使用wget進行下載,如下:

wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz

clip_image006

安裝包下載完畢后,我們開始解壓並安裝。如下:

tar -xf rsync-3.1.1.tar.gz

./configure

make &&make install

clip_image006[1]

clip_image007

clip_image008

注意:源碼安裝rsync時,其編譯時所需要的gcc庫文件盡量提前安裝完畢。

rsync源碼安裝會把rsync默認安裝到/usr/local/目錄下,我們可以通過相關幫助進行查看到。如下:

./configure --help

clip_image009

rsync安裝完畢后,我們可以查看rsync的使用幫助。我們此時需要切換到/usr/local/bin目錄下,如下:

/usr/local/bin

rsync -h

clip_image010

源碼方式安裝的rsync,要使其開機啟動的話。我們可以直接把啟動命令放入到rc.local文件中。如下:

echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

也可以寫成:

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

cat /etc/rc.local

clip_image011

5.2 RPM方式安裝

RPM方式安裝rsync比較簡單,直接使用yum進行安裝即可。如下:

yum -y install rsync

clip_image012

查看rsync安裝的位置,如下:

rpm -ql rsync-3.0.6-12.el6.x86_64

clip_image013

通過上圖可以看到RPM方式安裝的rsync是把rsync安裝到/usr/bin目錄下的,並且還生成一個/etc/xinetd.d/rsync文件。

查看安裝時產生的幫助文檔,如下:

more /usr/share/doc/rsync-3.0.6/README

clip_image014

安裝結束后,我們可以查看下rsync命令所在的目錄以及rsync的幫助。如下:

which rsync

rsync –-help

clip_image015

通過上圖可以很明顯的看到rsync確實被安裝到了/usr/bin目錄下。

RPM方式安裝的rsync,要使其開機啟動的話,我們也可以讓其與源碼方式安裝的一樣進行開機啟動。

除此之外還有一種方法,可以使其開機啟動。如果你注意觀察的話,會發現rsync在安裝時生成的/etc/xinetd.d/rsync文件。

在centos下rsync默認以xinetd方式運行rsync服務。所以RPM方式安裝的話rsync,我們只需啟動xinet服務即可。

但是在啟動xinetd服務之前,我們還需要配置文件/etc/xinetd.d/rsync,如下:

vi /etc/xinetd.d/rsync

clip_image016

配置完畢后,我們還需要安裝xinetd軟件包,否則無法啟動xinetd服務。如下:

yum -y install xinetd

/etc/init.d/xinetd start

chkconfig xinetd on

netstat -tunlp |grep 873

clip_image017

clip_image018

六、rsync命令參數詳解

rsync安裝完畢后,我們來查看下rsync命令的幫助,如下:

rsync --help

clip_image019

6.1 rsync幾個重要參數

我們先在此大致介紹下經常使用的幾個參數:-v,-a,-z,有關這些參數的具體說明詳見這篇文章《爛泥:【轉】rsync命令參數詳解》。

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

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

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

--delete:刪除那些DST中存在而在SRC中沒有的文件。

6.2 rsync六種工作模式

除此上述幾個參數之外,我們還注意到上圖中rsync的七個命令格式:如下:

1)rsync [OPTION]... SRC [SRC]... DEST

2)rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

3)rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

4)rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

5)rsync [OPTION]... [USER@]HOST:SRC [DEST]

6)rsync [OPTION]... [USER@]HOST::SRC [DEST]

7)rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

這七個命令格式就是代表rsync六種不同的工作模式,其中第四種和第七種模式沒有多大的區別。在這幾種模式中第三種和第六種模式是我們經常使用的,特別是第三種模式。

這六種模式總體上可以用兩個詞進行區分:推送、拉取。

推送就是在客戶端上執行rsync命令,目的是把客戶端需要同步的文件推送到服務器上。

拉取也是在客戶端上執行rsync命令,目的是把服務器上的文件拉取到本地。

注意:無論是推送和拉取,rsync命令都是在客戶端執行,只是命令的格式不同而已。

1) rsync [OPTION]... SRC [SRC]... DEST

同步本地文件,從一個目錄同步到另外一個目錄。如:rsync -avz /data /backup,表示把本地/data目錄下的文件同步到本地/backup目錄下。

2) rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

使用一個遠程shell程序(如rsh、ssh)來實現把本地的文件同步到遠程機器上。此種方式屬於推送方式如:rsync -avz /data test@192.168.199.247:/backup,表示把本地/data目錄下的文件同步到服務器192.168.199.247的/backup目錄下。

3) rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

把本地的文件同步到遠程服務器上其中DEST表示的是rsync服務器的認證模塊名。此種方式屬於推送方式如:rsync -avz /data test@192.168.199.247::backup --password-file=/etc/rsyncd.password,表示把本地/data目錄下的文件同步到服務器192.168.199.247的backup模塊下path路徑下。

4) rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

列出遠程機器的文件列表。這類似於ls命令,不過只要在命令中省略掉本地機信息即可。如:rsync -v rsync://test@192.168.199.247/backup,表示在本機列出服務器192.168.199.247的/backup目錄下的內容,如下:

clip_image020

5) rsync [OPTION]... [USER@]HOST:SRC [DEST]

把遠程機器的文件同步到本地,此種方式屬於拉取方式。如:rsync -avz test@192.168.199.247:/backup /data,表示把192.168.199.247的/backup目錄下文件同步到本地/data目錄下。

6) rsync [OPTION]... [USER@]HOST::SRC [DEST]

把遠程機器的文件同步到本地,此種方式屬於拉取方式。如:rsync -avz test@192.168.199.247::backup --password-file=/etc/rsyncd.password /data,表示把192.168.199.247的backup模塊path路徑下的文件同步到本地/data目錄下。

七、配置rsync

rsync安裝完畢后,我們就需要配置rsync。而對於rsync服務器來說,最重要和最復雜的就是它的配置了。

rsync的配置分為服務器端和客戶端,下面我們分開一一講解。

7.1 rsync服務器端配置

rsync服務器端需要兩個配置文件:rsyncd.conf、rsyncd.password。

其中rsyncd.conf默認存放在/etc/目錄下,同時它也是rsync服務器的主配置文件。該文件配置了rsync服務器的控制認證、訪問、日志記錄等等。而rsyncd.password主要用於存儲rsync用戶名和密碼。

但是在rsync安裝完畢后后是不會生成以上這兩個配置文件的,需要我們手工進行創建。

rsyncd.conf配置文件內容如下:

cat /etc/rsyncd.conf

uid = root

gid = root

user chroot = no

max connections = 200

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/run/rsyncd.log

[backup]

path = /backup/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = test

secrets file = /etc/rsyncd.password

[www]

path = /www/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = apache

secrets file = /etc/rsyncd.password

clip_image021

有關rsync配置文件的詳細講解,看下篇文章《爛泥:rsync配置文件詳解》。

rsync默認是在nobody用戶下運行的,但是我們為了以后同步時不為各種權限的事情煩惱,就讓其在root用戶下運行。

配置文件創建完畢后,我們來創建密碼文件。如下:

echo "test:test">>/etc/rsyncd.password

echo "apache:apache">>/etc/rsyncd.password

cat /etc/rsyncd.password

clip_image022

注意:該密碼文件中的用戶和密碼可以進行自定義,同時該用戶不一定要在服務器中的系統用戶存在。

clip_image023

密碼文件創建完畢后,要把其權限要設置為600,否則會在以后同步時提示驗證出錯。如下:

chmod 600 /etc/rsyncd.password

clip_image024

一個rsync配置文件中可以包含多個認證模塊,同時一個密碼文件中也可以存放多個用戶和其對應的密碼。其中每一個認證模塊可以對應不同的客戶端。

以上兩個文件創建完畢后,我們來創建其對應的目錄並授權,如下:

mkdir /{backup,www}

chown root:root –R /backup/

chown root:root –R /www/

clip_image025

clip_image026

以上就是rsync服務器端的配置。

7.2 rsync客戶端配置

rsync客戶端配置與服務器端相比差別還是比較大的。

在客戶端安裝完畢rsync服務后,是不需要啟動rsync服務的。我們只需要在客戶端創建連接rsync服務器時,驗證碼用戶所需要的密碼文件即可。

該密碼文件中的密碼要與rsync服務器上的密碼文件中的密碼對應,並且也要與rsync服務器rsyncd.conf配置文件中的認證模塊中的用戶匹配。

當然該密碼文件不創建也是可以的,不創建的話。我們在執行rsync操作時,就需要輸入rsync的對應用戶的密碼。如下:

echo "apache">>/etc/rsyncd.password

chmod 600 /etc/rsyncd.password

clip_image027

注意:該密碼文件中只能存放一個用戶的密碼,並且該文件與rsync服務器端的密碼文件一樣也需要把其權限設置為600。

以上就是rsync客戶端的配置。

八、rsync的啟動與關閉

rsync服務器端與客戶端都配置完畢后,我們就可以來啟動rsync服務器,並且也可以關閉rsync服務。

8.1 啟動rsync服務

在前面我們講過rsync-daemon認證方式,需要服務器和客戶端都安裝rsync服務,並且只需要rsync服務器端啟動rsync,同時配置rsync配置文件,客戶端啟動不啟動rsync服務。

在此我們只講解rsync-daemon認證方式的啟動。有關rsync使用ssh方式認證,我們就不在此講解了,如果有想了解的童鞋,可以看看6.2章節的rsync六種工作模式。

如果是源碼方式安裝的rsync,我們可以使用rsync –daemon來啟動rsync。如下:

echo PATH=$PATH:/usr/local/bin/>>/etc/profile

source /etc/profile

rsync --daemon

ps aux |grep rsync

netstat -tunlp |grep 873

clip_image028

注意:上述命令行中,只有rsync --daemon才是啟動rsync的命令。並且該命令啟動時,會默認加載/etc/rsyncd.conf文件。

所以如果rsync的配置文件不在/etc目錄下或者rsync配置文件名不為rsyncd.conf,那么我們在啟動rsync服務時,就要手工加上該配置文件的完整路徑。方法如下:

rsync --daemon --config=/etc/rsyncd.conf

clip_image029

有關如何加載該配置文件,我們可以通過rsync --daemon --help進行查看。如下:

rsync --daemon --help

clip_image030

如果是RPM方式安裝的rsync,我們在5.2章節RPM方式安裝rsync中已經講解過了,可以通過啟動xinetd服務來啟動rsync。如下:

/etc/init.d/xinetd start

clip_image031

以上就是rsync服務的啟動,下面我們開始介紹如何關閉rsync服務。

8.2 關閉rsync服務

要關閉rsync服務,如果是源碼方式安裝的,我們可以直接通過pkill rsync命令進行關閉。如下:

pkill rsync

clip_image032

如果是通過yum方式進行安裝的,我們可以通過關閉xinetd服務來達到關閉rsync服務的目的。如下:

/etc/init.d/xinetd stop

clip_image033

除了以上兩種方法之外,我們還可以通過比較暴力的方法關閉rsync服務。如下:

kill -9 6780

clip_image034

九、rsync同步實例

rsync服務正常啟動后,我們就要切換到客戶端來實際同步一個文件。

現在rsync服務器是192.168.199.247,rsync客戶端為192.168.199.248。

首先在rsync服務器192.168.199.247的www模塊下/www/目錄下新建一個文件ilanni247,內容如下:

ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -d: -f2

vi /www/ilanni247

this is server 247 www.

clip_image035

然后在rsync客戶端192.168.199.248的/root下新建一個www目錄,並在此目錄下創建一個文件ilanni248,內容如下:

ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -d: -f2

mkdir www

vi /www/ilanni248

this is client 248 www.

clip_image036

9.1 把248文件推送到247上

要把rsync客戶端192.168.199.248文件推送到rsync服務器192.168.199.247上,我們需要使用到rsync幫助命令中的第三種命令,如下:

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

有關這個命令的作用,我們在前面已經介紹過了,就是把本地的文件同步到遠程服務器上。

具體使用方法,如下:

rsync -avz /root/www/* apache@192.168.199.247::www --password-file=/etc/rsyncd.password

clip_image037

clip_image038

這條命令的作用是把/root/www目錄下的所有文件同步到192.168.199.247服務器的www模塊下。

如果要把/root/www/ilannidir目錄本身同步到192.168.199.247服務器的www模塊下的話,命令如下:

rsync -azv /root/www/ilannidir apache@192.168.199.247::www --password-file=/etc/rsyncd.password

或者:

rsync -azv /root/www/ilannidir apache@192.168.199.247::www --password-file=/etc/rsyncd.password

clip_image039

clip_image040

通過上圖,我們可以看到本地確實已經把文件與目錄同步到rsync服務器上了。

9.2 把247文件拉取到248上

要把rsync服務器192.168.199.247的文件拉取到rsync客戶端192.168.199.248上,我們需要使用到rsync幫助命令中的第六個命令,如下:

rsync [OPTION]... [USER@]HOST::SRC [DEST]

有關這個命令的作用,我們在前面已經介紹過了,就是把遠程機器的文件同步到本地。

具體使用方法,如下:

rsync -avz apache@192.168.199.247::www --password-file=/etc/rsyncd.password /root/www/

clip_image041

這條命令的作用是把192.168.199.247服務器的www模塊下所有文件同步到本機的/root/www/目錄下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM