爛泥: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/目錄下。