rsync

本頁使用了標題手工轉換,涉及首字符小寫
本页使用了标题或全文手工转换,现处于香港繁体模式
求聞百科,共筆求聞
rsync
原作者安德魯·垂鳩(Andrew Tridgell)與保羅·麥可拉斯(Paul Mackerras)
開發者韋恩·大衛森(Wayne Davison)
首次釋出1996年6月19日,​27年前​(1996-06-19[1]
穩定版本
3.2.3
(2020年8月6日,​3年前​(2020-08-06
程式語言C
系統平台跨平臺
類型數據傳輸差分備份
特許條款GNU GPLv3
網站rsync.samba.org

rsyncUnix下的一款套用軟件,它能同步更新兩處電腦的檔案目錄,並適當利用差分編碼以減少數據傳輸量。rsync中的一項同類軟件不常見的重要特性是每個目標的鏡像只需傳送一次。rsync可以拷貝/顯示目錄內容,以及拷貝檔案,並可選壓縮以及遞歸拷貝。

在常駐模式(daemon mode)下,rsync預設監聽TCP873,以原生rsync傳輸協定或者透過遠端shellRSH或者SSH提供檔案。SSH模式下,rsync用戶端執行程式必須同時在本機和遠端機器上安裝。

rsync是以GNU通用公眾特許條款發行的自由軟件

演算法

rsync實用程式使用由澳大利亞電腦程式師安德魯·垂鳩(Andrew Tridgell)發明的演算法,在當接受端電腦已經有相同結構(例如檔案)但不同版本時,有效的將結構傳輸過通訊連線。在他1999年的博士論文《Efficient Algorithms for Sorting and Synchronization》[2]中,詳細介紹了rsync的設計、實現與效能。

接受端將檔案拷貝打散成固定大小為的不重疊片段,並對每個片段計算兩個校驗和MD4雜湊函數與一個較弱的旋轉雜湊。它將這些校驗和送給發送者。通訊協定版本30(與rsync版本3.0.0一並發行)現在使用MD5雜湊函數以替代MD4。[3]

發送者對位於其版本的檔案中每個大小為的片段計算輪替校驗和,即使是重疊的片段。這可被有效的計算透過特別知識產權的輪替校驗和演算法:如果位元的輪替校驗和是,從位元的輪替校驗和可從,位元,以及位元計算出而不需要真正去檢驗中間的位元。因此,如果位元1到25的輪替校驗和已被算出,那計算位元2到26的輪替校驗和可完全依靠之前的校驗和與位元1與位元26算出。

rsync使用的旋轉雜湊來自於馬克艾德勒(Mark Adler)的adler-32校驗和演算法。該演算法也被用於zlib,而它本身也基於Fletcher校驗演算法。

發送者其後以接收者送來的一組輪替校驗和比較它自己的輪替校驗和以決定是否任何匹配存在。如果是的話,它便透過計算匹配區塊的MD4校驗和與接受端送來的MD4校驗和比較來驗證匹配。

發送者稍後傳送給接收者不與接收者方任何區塊匹配的檔案的那些部份,以及如何合併這些區塊到接收者版本的組裝指令。在實際上,這產生了與發送者端檔案一模一樣的拷貝。然而,在原則上是可能接收者的拷貝在這一點上不同:這可能發生在當兩個檔案有不同的區塊但有着相同的MD4雜湊函數與輪替校驗和;這種事情發生的概率在現實上極端罕見。

如果發送者與接收者檔案版本有許多區段相同,該公用程式只需傳送相對小部份的資料以將檔案同步。

在rsync演算法構成rsync應用程式核心並最佳化兩台電腦間TCP/IP的傳輸同時,rsync應用程式也支援其他種顯著增進檔案傳輸或備份的重要功能。他們包括在發送端與接收端個別利用zlib進行區塊區塊間壓縮解壓縮,以及支援通訊協定如ssh。該協定讓加密傳輸兼具壓縮與效率,透過rsync演算法產生的差分資料變得可能。除ssh以外,stunnel亦可被利用於創造加密通道以保全被傳輸的資料。

使用

  • rsync -avh source destination

rsync的撰寫是用來取代rcpSCP[4]。rsync最早期程式的其中之一是用來實現透過rsync/ssh與標準Unix賬號,從多重Unix客戶端鏡像或者備份到中央Unix伺服器。與如Cron類似的排程應用程式配合,任何人皆可排程介於多台電腦與中央伺服器間自動加密過、基於rsync的鏡像備份。

變種

一個叫做rdiff的公用程式利用rsync的演算法產生檔案A與檔案B間不同的差分檔案(與公用程式diff類似,不過不同的差分檔案格式)。差分檔案可稍後被套用到檔案A,轉成檔案B(類似patch公用程式)。

不像diff,產生差分檔案的過程有兩步:首先產生檔案A的簽名檔,然後這個(相對較小)的簽名檔與檔案B被用來產生差分檔。又與diff相異的是,rdiff可適用於二進位檔案

利用rdiff,自由軟件作者們寫了一個叫做rdiff-backup的公用程式,它可以跨過網絡維護位於另一台伺服器某個檔案或者目錄的備份鏡像。rdiff-backup儲存備份以及遞增的rdiff差分檔。這種方式讓回溯到任何備份點成為可能。

duplicity是rdiff-backup的一個變種,它利用單一儲存服務(像Amazon S3)達成不需要與儲存伺服器合作的備份。它透過產生預先產生每個區塊的雜湊函數,將它們加密,並送到伺服器儲存,然後當進行遞增備份時取回。剩下的資料為滿足保全需求也被加密儲存。

歷史

rsync首度發佈於1996年6月19日。原始作者為安德魯·垂鳩(Andrew Tridgell)與保羅·麥可拉斯(Paul Mackerras)。[5]

rsync 3.0於2008年3月1日發行。[6]

參見

參考資料

  1. Tridgell, Andrew. First release of rsync - rcp replacement. Newsgroupcomp.os.linux.announce. 19 June 1996. Usenet: cola-liw-835153950-21793-0@liw.clinet.fi. 
  2. Tridgell, Andrew; Efficient Algorithms for Sorting and Synchronization, February 1999, retrieved 29 September 2009
  3. 存档副本. [2008-10-24]. 
  4. 如在README 所述
  5. Tridgell, Andrew. First release of rsync - rcp replacement. Newsgroupcomp.os.linux.announce. 1996年6月19日. <cola-liw-835153950-21793-0@liw.clinet.fi>#1/1. 
  6. Davison, Wayne. Rsync 3.0.0 released. rsync-announce (郵寄清單). 2008年3月1日 [2008年10月24日]. 

外部連結