爛泥:linux檔案同步之rsync學習(一),linuxrsync

來源:互聯網
上載者:User

爛泥:linux檔案同步之rsync學習(一),linuxrsync

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

這幾天剛好有空就打算開始學習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。

一、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/

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

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

五、安裝rsync

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

注意:rsync軟體無論是伺服器端還是用戶端都是同一個軟體包。

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

5.1 源碼方式安裝

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

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

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

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

tar -xf rsync-3.1.1.tar.gz

./configure

make &&make install

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

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

./configure --help

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

/usr/local/bin

rsync -h

源碼方式安裝的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

5.2 RPM方式安裝

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

yum -y install rsync

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

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

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

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

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

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

which rsync

rsync –-help

通過可以很明顯的看到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

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

yum -y install xinetd

/etc/init.d/xinetd start

chkconfig xinetd on

netstat -tunlp |grep 873

六、rsync命令參數詳解

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

rsync --help

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目錄下的內容,如下:

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

有關rsync設定檔的詳細講解,看下篇文章《爛泥:rsync設定檔詳解》。

rsync預設是在nobody使用者下啟動並執行,但是我們為了以後同步時不為各種許可權的事情煩惱,就讓其在root使用者下運行。

設定檔建立完畢後,我們來建立密碼檔案。如下:

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

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

cat /etc/rsyncd.password

注意:該密碼檔案中的使用者和密碼可以進行自訂,同時該使用者不一定要在伺服器中的系統使用者存在。

密碼檔案建立完畢後,要把其許可權要設定為600,否則會在以後同步時提示驗證出錯。如下:

chmod 600 /etc/rsyncd.password

一個rsync設定檔中可以包含多個認證模組,同時一個密碼檔案中也可以存放多個使用者和其對應的密碼。其中每一個認證模組可以對應不同的用戶端。

以上兩個檔案建立完畢後,我們來建立其對應的目錄並授權,如下:

mkdir /{backup,www}

chown root:root –R /backup/

chown root:root –R /www/

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

7.2 rsync用戶端配置

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

在用戶端安裝完畢rsync服務後,是不需要啟動rsync服務的。我們只需要在用戶端建立串連rsync伺服器時,驗證碼使用者所需要的密碼檔案即可。

該密碼檔案中的密碼要與rsync伺服器上的密碼檔案中的密碼對應,並且也要與rsync伺服器rsyncd.conf設定檔中的認證模組中的使用者匹配。

當然該密碼檔案不建立也是可以的,不建立的話。我們在執行rsync操作時,就需要輸入rsync的對應使用者的密碼。如下:

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

chmod 600 /etc/rsyncd.password

注意:該密碼檔案中只能存放一個使用者的密碼,並且該檔案與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

注意:上述命令列中,只有rsync --daemon才是啟動rsync的命令。並且該命令啟動時,會預設載入/etc/rsyncd.conf檔案。

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

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

有關如何載入該設定檔,我們可以通過rsync --daemon --help進行查看。如下:

rsync --daemon --help

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

/etc/init.d/xinetd start

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

8.2 關閉rsync服務

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

pkill rsync

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

/etc/init.d/xinetd stop

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

kill -9 6780

九、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.

然後在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.

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

這條命令的作用是把/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

通過,我們可以看到本地確實已經把檔案與目錄同步到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/

這條命令的作用是把192.168.199.247伺服器的www模組下所有檔案同步到原生/root/www/目錄下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.