rsync的重要功能
速度:第一次,rsync複制源目錄和目标目錄之間的整個内容。下一次,rsync僅将更改的塊或位元組傳輸到目标位置,這使傳輸真正快速。
安全性:rsync允許在傳輸過程中使用ssh協定對資料進行加密。
較少帶寬:rsync分别在發送和接收端使用資料塊的壓縮和解壓縮。是以,rsync使用的帶寬與其他檔案傳輸協定相比總是較少。
特權:安裝和執行rsync不需要特殊的權限
使用格式:
<code>$ </code><code>rsync</code> <code>options </code><code>source</code> <code>destination</code>
Source 、destination可以是本地或遠端。在遠端的情況下,指定登入名,遠端伺服器名稱和位置。
1.同步本地伺服器中的兩個目錄
要同步本地計算機中的兩個目錄,請使用以下rsync -zvr指令
<code># rsync -zvr /tmp/ /data/</code>
<code>sending incremental </code><code>file</code> <code>list</code>
<code>ks-script-hd1UxV</code>
<code>yum.log</code>
<code>.ICE-unix/</code>
<code>.Test-unix/</code>
<code>.X11-unix/</code>
<code>.XIM-unix/</code>
<code>.font-unix/</code>
<code>111/</code>
<code>sent 642 bytes received 74 bytes 1432.00 bytes</code><code>/sec</code>
<code>total size is 836 speedup is 1.17</code>
在上面的rsync示例中:
-z是啟用壓縮
-v詳細
-r表示遞歸
現在讓我們看一下從源到目的地複制的檔案之一的時間戳。如下所示,rsync在同步期間沒有保留時間戳
<code># ll /tmp/yum.log /data/yum.log </code>
<code>-rw-------. 1 root root 0 Aug 25 22:16 </code><code>/data/yum</code><code>.log</code>
<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/tmp/yum</code><code>.log</code>
rsync選項-a表示歸檔模式。-a選項執行以下操作,
遞歸模式
儲存符号連結
保留權限
保留時間戳
儲存所有者群組
現在,執行示例1中提供的相同指令(但是使用rsync選項-a),如下所示:
<code># rsync -azv /tmp/ /data/ </code>
<code>./</code>
如下所示,rsync在同步期間保留時間戳
<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/data/yum</code><code>.log</code>
要僅複制一個檔案,請指定rsync指令的檔案名,如下所示。
<code># rsync -v /tmp/yum.log /data/</code>
<code>sent 67 bytes received 31 bytes 196.00 bytes</code><code>/sec</code>
<code>total size is 0 speedup is 0.00</code>
rsync允許您同步本地和遠端系統之間的檔案/目錄。
<code># rsync -avz /data/1.txt [email protected]:/data/</code>
<code>The authenticity of host </code><code>'192.168.0.172 (192.168.0.172)'</code> <code>can't be established.</code>
<code>ECDSA key fingerprint is 96:4f:34:ce:2f:c6:15:ae:24:06:02:7f:e1:a8:7f:66.</code>
<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>
<code>Warning: Permanently added </code><code>'192.168.0.172'</code> <code>(ECDSA) to the list of known hosts.</code>
<code>1.txt</code>
<code>sent 75 bytes received 31 bytes 11.16 bytes</code><code>/sec</code>
<code>total size is 6 speedup is 0.06</code>
在與遠端伺服器進行同步時,需要指定遠端伺服器的使用者名和IP位址。您還應該在遠端伺服器上指定目标目錄。格式為username @ machinename:path
如上所述,它在從本地到遠端伺服器執行rsync時要求輸入密碼。
有時您不想在從本地伺服器遠端伺服器備份檔案時輸入密碼。例如,如果您有一個備份shell腳本,可以使用rsync将檔案從本地檔案複制到遠端伺服器,那麼您無需輸入密碼即可使用rsync。
要做到這一點,請先安裝ssh密碼登入,
當要将檔案從遠端同步到本地時,請在目标的源和本地路徑中指定遠端路徑,如下所示。
<code># rsync -avz 192.168.0.176:/data/yum.log /data/ </code>
<code>receiving incremental </code><code>file</code> <code>list</code>
<code>sent 30 bytes received 73 bytes 18.73 bytes</code><code>/sec</code>
rsync允許您指定要使用的遠端shell。您可以使用rsync ssh啟用安全的遠端連接配接。使用rsync -e ssh指定要使用哪個遠端shell。在這種情況下,rsync将使用ssh
<code># rsync -avz -e ssh 192.168.0.176:/data/ /data/tmp/ </code>
<code>sent 53 bytes received 204 bytes 514.00 bytes</code><code>/sec</code>
在典型的同步情況下,如果檔案在目的地被修改,我們可能不想用來源的舊檔案覆寫該檔案。
使用rsync -u選項來做到這一點。(即不要覆寫目的地的檔案,如果被修改)。在以下示例中,名為Basenames的檔案已在目标位置修改。是以,它不會被rsync -u覆寫。
<code># cat /data/tmp/yum.log </code>
<code>111111</code>
<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/ </code>
<code>sent 16 bytes received 150 bytes 110.67 bytes</code><code>/sec</code>
<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/</code>
<code>2.txt</code>
<code>sent 38 bytes received 216 bytes 46.18 bytes</code><code>/sec</code>
<code>total size is 7 speedup is 0.03</code>
使用rsync -d選項隻能從源到目的地同步目錄樹。以下示例,以遞歸方式同步目錄樹,而不是目錄中的檔案。
<code># tree /data/</code>
<code>/data/</code>
<code>├── 1dir</code>
<code>│ ├── 4dir</code>
<code>│ │ └── 5.txt</code>
<code>│ └── 5dir</code>
<code>├── 2dir</code>
<code>├── 2.txt</code>
<code>├── 3dir</code>
<code>└── yum.log</code>
<code># rsync -vd 192.168.0.176:/data/ /data/tmp/ </code>
<code>receiving </code><code>file</code> <code>list ... </code><code>done</code>
<code>1dir/</code>
<code>2dir/</code>
<code>3dir/</code>
<code>sent 45 bytes received 231 bytes 552.00 bytes</code><code>/sec</code>
<code># tree /data/tmp/</code>
<code>/data/tmp/</code>
<code>3 directories, 2 files</code>
當您使用rsync進行備份時,您可能需要知道備份的進度。即有多少個檔案是副本,以什麼速度複制檔案等。
rsync -progress選項顯示rsync執行的詳細進度,如下所示。
<code># rsync -avz --progress 192.168.0.176:/data/ /data/tmp/</code>
<code> </code><code>0 100% 0.00kB</code><code>/s</code> <code>0:00:00 (xfer</code><code>#1, to-check=15/18)</code>
<code>1dir</code><code>/4dir/</code>
<code>1dir</code><code>/4dir/5</code><code>.txt</code>
<code> </code><code>6 100% 5.86kB</code><code>/s</code> <code>0:00:00 (xfer</code><code>#2, to-check=4/18)</code>
<code>1dir</code><code>/5dir/</code>
<code>2dir</code><code>/4dir/</code>
<code>2dir</code><code>/5dir/</code>
<code>3dir</code><code>/4dir/</code>
<code>3dir</code><code>/5dir/</code>
<code>sent 93 bytes received 470 bytes 375.33 bytes</code><code>/sec</code>
<code>total size is 13 speedup is 0.02</code>
您還可以使用rsnapshot實用程式(使用rsync)來備份本地linux伺服器或備份遠端linux伺服器。
如果檔案不存在于源,但存在于目标中,則可能需要在rsync期間删除目标檔案。
在這種情況下,請使用-delete選項,如下所示。rsync delete選項删除源目錄中不存在的檔案。
目标有新的檔案名為1.txt,當與-delete選項同步時,它删除了檔案1.txt
如果你願意,你可以更新(同步)目标的現有檔案。如果源有新的檔案,目标不存在,您可以避免在目标上建立這些新檔案。如果需要此功能,請使用-existing選項與rsync指令。
首先,把目前的之前同步的3.txt删除,目的地就沒有了3.txt
<code># rm -rf /data/tmp/3.txt</code>
<code>[root@kvm-host ~]</code><code># rsync -avz --existing 192.168.0.176:/data/ /data/tmp/</code>
<code>sent 28 bytes received 405 bytes 66.62 bytes</code><code>/sec</code>
<code>total size is 53 speedup is 0.12</code>
source:
<code># ll /data/</code>
<code>total 12</code>
<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 1dir</code>
<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 2dir</code>
<code>-rw-r--r--. 1 root root 7 Aug 25 23:06 2.txt</code>
<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 3dir</code>
<code>-rw-r--r--. 1 root root 20 Aug 25 23:22 3.txt</code>
<code>-rw-r--r--. 1 root root 20 Aug 25 23:21 new-</code><code>file</code><code>.txt</code>
<code>-rw-------. 1 root root 0 Aug 25 22:21 yum.log</code>
dst:
<code># ll /data/tmp/</code>
<code>total 16</code>
<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 1dir</code>
<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 2dir</code>
<code>-rw-r--r-- 1 root root 7 Aug 25 23:06 2.txt</code>
<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 3dir</code>
<code>-rw------- 1 root root 0 Aug 25 22:21 yum.log</code>
現在讓我們看看rsync如何顯示這個差異。-i選項顯示項目更改。
<code> </code><code>rsync</code> <code>-avzi 192.168.0.176:</code><code>/data/</code> <code>/data/tmp/</code>
<code>>f+++++++++ 3.txt</code>
<code>>f+++++++++ new-</code><code>file</code><code>.txt</code>
<code>sent 63 bytes received 520 bytes 1166.00 bytes</code><code>/sec</code>
<code>total size is 53 speedup is 0.09</code>
在輸出中,它顯示檔案名或目錄名前面的9個字母,表示更改。
在我們的例子中,前面的字母表示如下:
<code>>指定檔案正在傳輸到本地主機。</code>
<code>f表示它是一個檔案。</code>
<code>s表示大小變化。t表示時間戳更改。</code>
<code>o所有者改變</code>
<code>g組改變了。</code>
rsync允許您在進行同步時給出要包含的模式并排除檔案或目錄。
<code># mkdir /data/{s1dir,s2dri}</code>
<code># mkdir /data/r1dir</code>
<code># touch /data/r1dir/u.txt</code>
<code># rsync -avz --include 's*' --exclude '*' 192.168.0.176:/data/ /data/tmp/ </code>
<code>s1dir/</code>
<code>s2dri/</code>
<code>sent 37 bytes received 80 bytes 234.00 bytes</code><code>/sec</code>
在上面的例子中,它隻包含以's'(使用rsync include)開頭的檔案或目錄,并排除所有其他檔案。(使用rsync 排除'*')
您可以告訴rsync不要使用rsync -max-size選項傳輸大于特定大小的檔案。
<code># ll -h /data/test.txt /data/t.txt</code>
<code>-rw-r--r--. 1 root root 78K Aug 25 23:51 </code><code>/data/test</code><code>.txt</code>
<code>-rw-r--r--. 1 root root 2.0K Aug 25 23:52 </code><code>/data/t</code><code>.txt</code>
<code># rsync -avz --max-size="50K" 192.168.0.176:/data/ /data/tmp/</code>
<code>t.txt</code>
<code>r1dir/</code>
<code>r1dir</code><code>/u</code><code>.txt</code>
<code>sent 72 bytes received 1300 bytes 249.45 bytes</code><code>/sec</code>
<code>total size is 81341 speedup is 59.29</code>
max-size = 50K使rsync僅傳輸小于或等于50K的檔案。您可以将M表示為兆位元組,G表示千兆位元組。
rsync的一個主要特點是它隻将更改的塊傳輸到目的地,而不是發送整個檔案。
如果不考慮網絡帶寬(但CPU除外),則可以使用rsync -W選項傳輸整個檔案。這将加速rsync程序,因為它不必在源和目的地執行校驗和
<code># rsync -avzW 192.168.0.176:/data/ /data/tmp/</code>
<code>test</code><code>.txt</code>
<code>sent 47 bytes received 13085 bytes 2387.64 bytes</code><code>/sec</code>
<code>total size is 81341 speedup is 6.19</code>
16、通過ssh無密碼rsync
首先需要生成沒有加密的public key,把你的ssh public key放到遠端主機
<code># ssh-keygen</code>
<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase):</code>
<code>Enter same passphrase again:</code>
<code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub 192.168.0.176</code>
<code># rsync -avz -e ssh /data/tmp/ 192.168.0.176:/data/</code>
<code></code>
本文轉自 喵來個魚 51CTO部落格,原文連結:http://blog.51cto.com/m51cto/1959478,如需轉載請自行聯系原作者